From: glennrp Date: Thu, 9 Jun 2011 04:21:43 +0000 (+0000) Subject: Sometimes black would be written in the PNG tRNS chunk when some other X-Git-Tag: 7.0.1-0~7444 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=3e3e20f27f74686a93873f25b015e0e8e40f451d;p=imagemagick Sometimes black would be written in the PNG tRNS chunk when some other gray level was supposed to be, on Q16 or Q32 builds, 1-, 2-, or 4-bit files. --- diff --git a/ChangeLog b/ChangeLog index fb08368d1..57691e4a6 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2011-05-20 6.7.0-7 Glenn Randers-Pehrson + * The PNG encoder would sometimes make black transparent when some + other gray level was supposed to be the transparent color (reference + http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=18900). + This occurred only with 1, 2, 4-bit grayscale images with Q16 or Q32 + builds. + 2011-06-08 6.7.0-6 Cristy * New version 6.7.0-6. diff --git a/coders/png.c b/coders/png.c index 2bde571d5..143f08492 100644 --- a/coders/png.c +++ b/coders/png.c @@ -410,7 +410,6 @@ } -#if MAGICKCORE_QUANTUM_DEPTH > 8 /* LBR08: Replicate top 8 bits */ #define LBR08RedPixelPacketComponent(pixelpacket) \ @@ -488,10 +487,8 @@ LBR08RGBPixelComponent((pixel)); \ LBR08OpacityPixelComponent((pixel)); \ } -#endif /* MAGICKCORE_QUANTUM_DEPTH > 8 */ -#if MAGICKCORE_QUANTUM_DEPTH > 16 /* LBR16: Replicate top 16 bits */ #define LBR16RedPixelPacketComponent(pixelpacket) \ @@ -569,7 +566,6 @@ LBR16RGBPixelComponent((pixel)); \ LBR16OpacityPixelComponent((pixel)); \ } -#endif /* MAGICKCORE_QUANTUM_DEPTH > 16 */ /* Establish thread safety. @@ -9525,7 +9521,7 @@ static MagickBooleanType WriteOnePNGImage(MngInfo *mng_info, { ping_background.gray=(png_uint_16) - (QuantumScale*(maxval*(PixelIntensity(&image->background_color)))); + ((1./255.)*(maxval*(PixelIntensity(&image->background_color)))); if (logging != MagickFalse) (void) LogMagickEvent(CoderEvent,GetMagickModule(), @@ -9537,8 +9533,20 @@ static MagickBooleanType WriteOnePNGImage(MngInfo *mng_info, ping_have_bKGD = MagickTrue; } - ping_trans_color.gray=(png_uint_16) (QuantumScale*(maxval* - ping_trans_color.gray)); +#if 1 + + if (logging != MagickFalse) + (void) LogMagickEvent(CoderEvent,GetMagickModule(), + " Scaling ping_trans_color.gray from %d", + (int)ping_trans_color.gray); + + ping_trans_color.gray=(png_uint_16) ((1./255.)*(maxval* + ping_trans_color.gray)+.5); + + if (logging != MagickFalse) + (void) LogMagickEvent(CoderEvent,GetMagickModule(), + " to %d", (int)ping_trans_color.gray); +#endif } if (ping_exclude_bKGD == MagickFalse)