diff --git a/Tests/test_image_quantize.py b/Tests/test_image_quantize.py index 27f4640e084..9f56575a805 100644 --- a/Tests/test_image_quantize.py +++ b/Tests/test_image_quantize.py @@ -85,3 +85,20 @@ def test_transparent_colors_equal(): converted = im.quantize() converted_px = converted.load() assert converted_px[0, 0] == converted_px[0, 1] + + +@pytest.mark.parametrize( + "method, color", + ( + (Image.MEDIANCUT, (0, 0, 0)), + (Image.MAXCOVERAGE, (0, 0, 0)), + (Image.FASTOCTREE, (0, 0, 0)), + (Image.FASTOCTREE, (0, 0, 0, 0)), + ), +) +def test_palette(method, color): + im = Image.new("RGBA" if len(color) == 4 else "RGB", (1, 1), color) + + converted = im.quantize(method=method) + converted_px = converted.load() + assert converted_px[0, 0] == converted.palette.colors[color] diff --git a/src/libImaging/QuantOctree.c b/src/libImaging/QuantOctree.c index b8d4d1d7c02..5e79bce358a 100644 --- a/src/libImaging/QuantOctree.c +++ b/src/libImaging/QuantOctree.c @@ -317,7 +317,7 @@ void add_lookup_buckets(ColorCube cube, ColorBucket palette, long nColors, long offset) { long i; Pixel p; - for (i = offset; i < offset + nColors; i++) { + for (i = offset + nColors - 1; i >= offset; i--) { avg_color_from_color_bucket(&palette[i], &p); set_lookup_value(cube, &p, i); }