From: Jason S. <ja...@po...> - 2012-03-24 20:46:52
|
If, when reading a palette image with libpng 1.5.9, I call png_set_shift() and then png_set_palette_to_rgb(), the bits get shifted twice as far as I asked for. (If I call png_set_shift *after* png_set_palette_to_rgb, then I get the correct result.) For example, a white palette color (255,255,255) with significant bits (8,7,6) ought to be transformed to (255,127,63). But it actually gets transformed to (255,63,15). There are probably also other ways to cause the bits of palette images to be shifted multiple times. Assuming it's a bug, I suggest the following fix: In pngrtran.c, inside the clause that begins: if ((png_ptr->transformations & PNG_SHIFT) && (color_type == PNG_COLOR_TYPE_PALETTE))) add the line: png_ptr->transformations &= ~PNG_SHIFT; -- Jason Summers |