{
for (x=0; x < ping_num_trans; x++)
{
- image->colormap[x].opacity = ScaleCharToQuantum((unsigned char)(255-ping_trans_alpha[x]));
+ image->colormap[x].opacity =
+ ScaleCharToQuantum((unsigned char)(255-ping_trans_alpha[x]));
}
}
else if (ping_color_type == PNG_COLOR_TYPE_GRAY)
num_passes,
pass;
- png_bytep
- ping_trans_alpha;
+ png_byte
+ ping_trans_alpha[256];
png_colorp
palette;
ping_trans_color.blue=0;
ping_trans_color.gray=0;
- ping_trans_alpha = NULL;
-
quantum_info = (QuantumInfo *) NULL;
image_colors=image->colors;
image_depth=image->depth;
ping_num_trans=0;
if (ping_num_trans != 0)
{
- ping_trans_alpha=(unsigned char *) AcquireQuantumMemory(
- number_colors,sizeof(*ping_trans_alpha));
- if (ping_trans_alpha == (unsigned char *) NULL)
- ThrowWriterException(ResourceLimitError,
- "MemoryAllocationFailed");
for (i=0; i < (ssize_t) number_colors; i++)
ping_trans_alpha[i]=(png_byte) trans[i];
}
" Added an opaque matte channel");
}
+ if (image->matte == MagickTrue && ping_color_type < 4)
+ {
+ if (ping_color_type == 3 && ping_num_trans == 0)
+ {
+ png_set_invalid(ping,ping_info,PNG_INFO_tRNS);
+ if (logging != MagickFalse)
+ (void) LogMagickEvent(CoderEvent,GetMagickModule(),
+ " Ignoring request to write tRNS chunk with num_trans==0");
+ }
+ else
+ (void) png_set_tRNS(ping, ping_info,
+ ping_trans_alpha,
+ ping_num_trans,
+ &ping_trans_color);
+ }
+
if (logging != MagickFalse)
(void) LogMagickEvent(CoderEvent,GetMagickModule(),
" Writing PNG header chunks");
}
for (y=0; y < (ssize_t) image->rows; y++)
{
- if (logging)
+ if (logging && y == 0)
(void) LogMagickEvent(CoderEvent,GetMagickModule(),
" pass %d, Image Is RGB, 16-bit GRAY, or GRAY_ALPHA",pass);
p=GetVirtualPixels(image,0,y,image->columns,1,&image->exception);