mirror of
				https://github.com/python-pillow/Pillow.git
				synced 2025-11-04 01:47:47 +03:00 
			
		
		
		
	Fixed bug with rounding pixels to palette
This fixes a bug with rounding pixels to the nearest palette color. Specifically, there is a typo with computing the minimum distance from a palette color to a given cache box. This is causing palette colors to be incorrectly excluded from consideration.
This commit is contained in:
		
							parent
							
								
									765d66c069
								
							
						
					
					
						commit
						9f9e26522e
					
				
										
											Binary file not shown.
										
									
								
							| 
		 Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 17 KiB  | 
										
											Binary file not shown.
										
									
								
							| 
		 Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 20 KiB  | 
										
											Binary file not shown.
										
									
								
							| 
		 Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 17 KiB  | 
| 
						 | 
					@ -9,7 +9,7 @@ def test_entropy():
 | 
				
			||||||
    assert round(abs(entropy("L") - 7.063008716585465), 7) == 0
 | 
					    assert round(abs(entropy("L") - 7.063008716585465), 7) == 0
 | 
				
			||||||
    assert round(abs(entropy("I") - 7.063008716585465), 7) == 0
 | 
					    assert round(abs(entropy("I") - 7.063008716585465), 7) == 0
 | 
				
			||||||
    assert round(abs(entropy("F") - 7.063008716585465), 7) == 0
 | 
					    assert round(abs(entropy("F") - 7.063008716585465), 7) == 0
 | 
				
			||||||
    assert round(abs(entropy("P") - 5.0530452472519745), 7) == 0
 | 
					    assert round(abs(entropy("P") - 5.082506854662517), 7) == 0
 | 
				
			||||||
    assert round(abs(entropy("RGB") - 8.821286587714319), 7) == 0
 | 
					    assert round(abs(entropy("RGB") - 8.821286587714319), 7) == 0
 | 
				
			||||||
    assert round(abs(entropy("RGBA") - 7.42724306524488), 7) == 0
 | 
					    assert round(abs(entropy("RGBA") - 7.42724306524488), 7) == 0
 | 
				
			||||||
    assert round(abs(entropy("CMYK") - 7.4272430652448795), 7) == 0
 | 
					    assert round(abs(entropy("CMYK") - 7.4272430652448795), 7) == 0
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -16,7 +16,7 @@ def test_getcolors():
 | 
				
			||||||
    assert getcolors("L") == 255
 | 
					    assert getcolors("L") == 255
 | 
				
			||||||
    assert getcolors("I") == 255
 | 
					    assert getcolors("I") == 255
 | 
				
			||||||
    assert getcolors("F") == 255
 | 
					    assert getcolors("F") == 255
 | 
				
			||||||
    assert getcolors("P") == 90  # fixed palette
 | 
					    assert getcolors("P") == 96  # fixed palette
 | 
				
			||||||
    assert getcolors("RGB") is None
 | 
					    assert getcolors("RGB") is None
 | 
				
			||||||
    assert getcolors("RGBA") is None
 | 
					    assert getcolors("RGBA") is None
 | 
				
			||||||
    assert getcolors("CMYK") is None
 | 
					    assert getcolors("CMYK") is None
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -10,7 +10,7 @@ def test_histogram():
 | 
				
			||||||
    assert histogram("L") == (256, 0, 662)
 | 
					    assert histogram("L") == (256, 0, 662)
 | 
				
			||||||
    assert histogram("I") == (256, 0, 662)
 | 
					    assert histogram("I") == (256, 0, 662)
 | 
				
			||||||
    assert histogram("F") == (256, 0, 662)
 | 
					    assert histogram("F") == (256, 0, 662)
 | 
				
			||||||
    assert histogram("P") == (256, 0, 1871)
 | 
					    assert histogram("P") == (256, 0, 1551)
 | 
				
			||||||
    assert histogram("RGB") == (768, 4, 675)
 | 
					    assert histogram("RGB") == (768, 4, 675)
 | 
				
			||||||
    assert histogram("RGBA") == (1024, 0, 16384)
 | 
					    assert histogram("RGBA") == (1024, 0, 16384)
 | 
				
			||||||
    assert histogram("CMYK") == (1024, 0, 16384)
 | 
					    assert histogram("CMYK") == (1024, 0, 16384)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -76,7 +76,9 @@ TODO
 | 
				
			||||||
Other Changes
 | 
					Other Changes
 | 
				
			||||||
=============
 | 
					=============
 | 
				
			||||||
 | 
					
 | 
				
			||||||
TODO
 | 
					Fixed bug with rounding pixels to palette
 | 
				
			||||||
^^^^
 | 
					^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 | 
				
			||||||
 | 
					
 | 
				
			||||||
TODO
 | 
					Fixed a bug when rounding image pixels to palette colors. This affects the results of
 | 
				
			||||||
 | 
					``Image.quantize`` and of ``Image.convert`` when converting from mode "RGB" to "P",
 | 
				
			||||||
 | 
					"L", or "1", regardless of whether dithering is enabled.
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -200,15 +200,15 @@ ImagingPaletteCacheUpdate(ImagingPalette palette, int r, int g, int b) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /* Find min and max distances to any point in the box */
 | 
					        /* Find min and max distances to any point in the box */
 | 
				
			||||||
        r = palette->palette[i * 4 + 0];
 | 
					        r = palette->palette[i * 4 + 0];
 | 
				
			||||||
        tmin = (r < r0) ? RDIST(r, r1) : (r > r1) ? RDIST(r, r0) : 0;
 | 
					        tmin = (r < r0) ? RDIST(r, r0) : (r > r1) ? RDIST(r, r1) : 0;
 | 
				
			||||||
        tmax = (r <= rc) ? RDIST(r, r1) : RDIST(r, r0);
 | 
					        tmax = (r <= rc) ? RDIST(r, r1) : RDIST(r, r0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        g = palette->palette[i * 4 + 1];
 | 
					        g = palette->palette[i * 4 + 1];
 | 
				
			||||||
        tmin += (g < g0) ? GDIST(g, g1) : (g > g1) ? GDIST(g, g0) : 0;
 | 
					        tmin += (g < g0) ? GDIST(g, g0) : (g > g1) ? GDIST(g, g1) : 0;
 | 
				
			||||||
        tmax += (g <= gc) ? GDIST(g, g1) : GDIST(g, g0);
 | 
					        tmax += (g <= gc) ? GDIST(g, g1) : GDIST(g, g0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        b = palette->palette[i * 4 + 2];
 | 
					        b = palette->palette[i * 4 + 2];
 | 
				
			||||||
        tmin += (b < b0) ? BDIST(b, b1) : (b > b1) ? BDIST(b, b0) : 0;
 | 
					        tmin += (b < b0) ? BDIST(b, b0) : (b > b1) ? BDIST(b, b1) : 0;
 | 
				
			||||||
        tmax += (b <= bc) ? BDIST(b, b1) : BDIST(b, b0);
 | 
					        tmax += (b <= bc) ? BDIST(b, b1) : BDIST(b, b0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        dmin[i] = tmin;
 | 
					        dmin[i] = tmin;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user