From: glennrp Date: Wed, 5 May 2010 12:47:19 +0000 (+0000) Subject: Simplified rowbytes calculation and added some logging in coders/png.c X-Git-Tag: 7.0.1-0~9557 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=b4a1341a4d06abe5f603ad9052b6ddc1a667dcd5;p=imagemagick Simplified rowbytes calculation and added some logging in coders/png.c --- diff --git a/ChangeLog b/ChangeLog index bdf8b44c7..168956c1e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2010-05-05 6.6.1-6 Glenn Randers-Pehrson + * Simplified and corrected rowbytes calculation in coders/png.c and + added more logging. + 2010-05-05 6.6.1-6 Anthony Thyssen * Rename of "Add" and "Subtract" compositions to "ModulusAdd" and "ModulusSubtract" for more clarity of there functions. Old names diff --git a/coders/png.c b/coders/png.c index 79a727446..bbdc32623 100644 --- a/coders/png.c +++ b/coders/png.c @@ -7467,6 +7467,9 @@ static MagickBooleanType WriteOnePNGImage(MngInfo *mng_info, /* Add an opaque matte channel */ image->matte = MagickTrue; (void) SetImageOpacity(image,0); + if (logging != MagickFalse) + (void) LogMagickEvent(CoderEvent,GetMagickModule(), + " Added an opaque matte channel"); } if (logging != MagickFalse) @@ -7512,36 +7515,29 @@ static MagickBooleanType WriteOnePNGImage(MngInfo *mng_info, Allocate memory. */ rowbytes=image->columns; - if (image_depth <= 8) + if (image_depth > 8) + rowbytes*=2; + switch (mng_info->write_png_colortype-1) { - if (mng_info->write_png24 || (mng_info->write_png_depth == 8 && - mng_info->write_png_colortype-1 == PNG_COLOR_TYPE_RGB)) + case PNG_COLOR_TYPE_RGB: rowbytes*=3; - else if (mng_info->write_png32 || (mng_info->write_png_depth == 8 && - mng_info->write_png_colortype-1 == PNG_COLOR_TYPE_RGB_ALPHA)) + break; + case PNG_COLOR_TYPE_GRAY_ALPHA: + rowbytes*=2; + break; + case PNG_COLOR_TYPE_RGBA: rowbytes*=4; - else if ((!mng_info->write_png8 || - mng_info->write_png_colortype-1 == PNG_COLOR_TYPE_GRAY || - mng_info->write_png_colortype-1 == PNG_COLOR_TYPE_GRAY_ALPHA )&& - ((mng_info->optimize || mng_info->IsPalette) && ImageIsGray(image))) - rowbytes*=(image_matte ? 2 : 1); - else - { - if (!mng_info->IsPalette) - rowbytes*=(image_matte ? 4 : 3); - } + break; + default: + break; } - else + if (logging) { - if ((mng_info->optimize || mng_info->IsPalette) && - ImageIsGray(image)) - rowbytes*=(image_matte ? 4 : 2); - else - rowbytes*=(image_matte ? 8 : 6); + (void) LogMagickEvent(CoderEvent,GetMagickModule(), + " Writing PNG image data"); + (void) LogMagickEvent(CoderEvent,GetMagickModule(), + " Allocating %lu bytes of memory for pixels",rowbytes); } - if (logging) - (void) LogMagickEvent(CoderEvent,GetMagickModule(), - " Allocating %lu bytes of memory for pixels",rowbytes); png_pixels=(unsigned char *) AcquireQuantumMemory(rowbytes, sizeof(*png_pixels)); if (png_pixels == (unsigned char *) NULL) @@ -7617,6 +7613,9 @@ static MagickBooleanType WriteOnePNGImage(MngInfo *mng_info, for (i=0; i < (long) image->columns; i++) *(png_pixels+i)=(unsigned char) ((*(png_pixels+i) > 127) ? 255 : 0); + if (logging && y == 0) + (void) LogMagickEvent(CoderEvent,GetMagickModule(), + " Writing row of pixels (1)"); png_write_row(ping,png_pixels); } if (image->previous == (Image *) NULL) @@ -7652,12 +7651,21 @@ static MagickBooleanType WriteOnePNGImage(MngInfo *mng_info, else (void) ExportQuantumPixels(image,(const CacheView *) NULL, quantum_info,RedQuantum,png_pixels,&image->exception); + if (logging && y == 0) + (void) LogMagickEvent(CoderEvent,GetMagickModule(), + " Writing GRAY PNG pixels (2)"); } else /* PNG_COLOR_TYPE_GRAY_ALPHA */ { + if (logging && y == 0) + (void) LogMagickEvent(CoderEvent,GetMagickModule(), + " Writing GRAY_ALPHA PNG pixels (2)"); (void) ExportQuantumPixels(image,(const CacheView *) NULL, quantum_info,GrayAlphaQuantum,png_pixels,&image->exception); } + if (logging && y == 0) + (void) LogMagickEvent(CoderEvent,GetMagickModule(), + " Writing row of pixels (2)"); png_write_row(ping,png_pixels); } if (image->previous == (Image *) NULL) @@ -7688,14 +7696,22 @@ static MagickBooleanType WriteOnePNGImage(MngInfo *mng_info, quantum_info,GrayQuantum,png_pixels,&image->exception); } else if (ping_color_type == PNG_COLOR_TYPE_GRAY_ALPHA) - (void) ExportQuantumPixels(image,(const CacheView *) NULL, - quantum_info,GrayAlphaQuantum,png_pixels,&image->exception); + { + (void) ExportQuantumPixels(image,(const CacheView *) NULL, + quantum_info,GrayAlphaQuantum,png_pixels,&image->exception); + if (logging && y == 0) + (void) LogMagickEvent(CoderEvent,GetMagickModule(), + " Writing GRAY_ALPHA PNG pixels (3)"); + } else if (image_matte != MagickFalse) (void) ExportQuantumPixels(image,(const CacheView *) NULL, quantum_info,RGBAQuantum,png_pixels,&image->exception); else (void) ExportQuantumPixels(image,(const CacheView *) NULL, quantum_info,RGBQuantum,png_pixels,&image->exception); + if (logging && y == 0) + (void) LogMagickEvent(CoderEvent,GetMagickModule(), + " Writing row of pixels (3)"); png_write_row(ping,png_pixels); } else @@ -7724,11 +7740,19 @@ static MagickBooleanType WriteOnePNGImage(MngInfo *mng_info, (void) ExportQuantumPixels(image,(const CacheView *) NULL, quantum_info,GrayQuantum,png_pixels,&image->exception); else if (ping_color_type == PNG_COLOR_TYPE_GRAY_ALPHA) - (void) ExportQuantumPixels(image,(const CacheView *) NULL, - quantum_info,GrayAlphaQuantum,png_pixels,&image->exception); + { + if (y == 0) + (void) LogMagickEvent(CoderEvent,GetMagickModule(), + " Writing GRAY_ALPHA PNG pixels (4)"); + (void) ExportQuantumPixels(image,(const CacheView *) NULL, + quantum_info,GrayAlphaQuantum,png_pixels,&image->exception); + } else (void) ExportQuantumPixels(image,(const CacheView *) NULL, quantum_info,IndexQuantum,png_pixels,&image->exception); + if (y == 0) + (void) LogMagickEvent(CoderEvent,GetMagickModule(), + " Writing row of pixels (4)"); png_write_row(ping,png_pixels); } } @@ -7746,7 +7770,7 @@ static MagickBooleanType WriteOnePNGImage(MngInfo *mng_info, if (logging != MagickFalse) { (void) LogMagickEvent(CoderEvent,GetMagickModule(), - " Writing PNG image data"); + " Wrote PNG image data"); (void) LogMagickEvent(CoderEvent,GetMagickModule(), " Width: %lu",(unsigned long) ping_width); (void) LogMagickEvent(CoderEvent,GetMagickModule(),