mirror of
https://git.freebsd.org/ports.git
synced 2025-06-08 14:20:33 -04:00
241 lines
9.8 KiB
C
241 lines
9.8 KiB
C
--- coders/png.c.orig 2008-01-18 00:34:17.000000000 +0100
|
||
+++ coders/png.c 2012-04-29 07:23:05.000000000 +0200
|
||
@@ -73,6 +73,7 @@
|
||
#if defined(HasPNG)
|
||
#include "png.h"
|
||
#include "zlib.h"
|
||
+#include "pngpriv.h"
|
||
|
||
#if PNG_LIBPNG_VER > 95
|
||
/*
|
||
@@ -1365,7 +1366,7 @@
|
||
" libpng-%.1024s error: %.1024s", PNG_LIBPNG_VER_STRING,
|
||
message);
|
||
(void) ThrowException2(&image->exception,CoderError,message,image->filename);
|
||
- longjmp(ping->jmpbuf,1);
|
||
+ longjmp(png_jmpbuf(ping),1);
|
||
}
|
||
|
||
static void PNGWarningHandler(png_struct *ping,png_const_charp message)
|
||
@@ -1660,7 +1661,7 @@
|
||
ThrowReaderException(ResourceLimitError,MemoryAllocationFailed,image)
|
||
}
|
||
png_pixels=(unsigned char *) NULL;
|
||
- if (setjmp(ping->jmpbuf))
|
||
+ if (setjmp(png_jmpbuf(ping)))
|
||
{
|
||
/*
|
||
PNG image is corrupt.
|
||
@@ -2038,10 +2039,10 @@
|
||
/*
|
||
Image has a transparent background.
|
||
*/
|
||
- transparent_color.red=(int) (ping_info->trans_values.red*scale);
|
||
- transparent_color.green=(int) (ping_info->trans_values.green*scale);
|
||
- transparent_color.blue=(int) (ping_info->trans_values.blue*scale);
|
||
- transparent_color.opacity=(int) (ping_info->trans_values.gray*scale);
|
||
+ transparent_color.red=(int) (ping_info->trans_color.red*scale);
|
||
+ transparent_color.green=(int) (ping_info->trans_color.green*scale);
|
||
+ transparent_color.blue=(int) (ping_info->trans_color.blue*scale);
|
||
+ transparent_color.opacity=(int) (ping_info->trans_color.gray*scale);
|
||
if (ping_info->color_type == PNG_COLOR_TYPE_GRAY)
|
||
{
|
||
transparent_color.red=transparent_color.opacity;
|
||
@@ -2547,7 +2548,7 @@
|
||
index=indexes[x];
|
||
if (index < ping_info->num_trans)
|
||
q->opacity=
|
||
- ScaleCharToQuantum(255-ping_info->trans[index]);
|
||
+ ScaleCharToQuantum(255-ping_info->trans_alpha[index]);
|
||
q++;
|
||
}
|
||
else if (ping_info->color_type == PNG_COLOR_TYPE_GRAY)
|
||
@@ -6030,7 +6031,7 @@
|
||
png_set_write_fn(ping,image,png_put_data,png_flush_data);
|
||
png_pixels=(unsigned char *) NULL;
|
||
|
||
- if (setjmp(ping->jmpbuf))
|
||
+ if (setjmp(png_jmpbuf(ping)))
|
||
{
|
||
/*
|
||
PNG write failed.
|
||
@@ -6229,12 +6230,12 @@
|
||
/*
|
||
Identify which colormap entry is transparent.
|
||
*/
|
||
- ping_info->trans=MagickAllocateMemory(unsigned char *,number_colors);
|
||
- if (ping_info->trans == (unsigned char *) NULL)
|
||
+ ping_info->trans_alpha=MagickAllocateMemory(unsigned char *,number_colors);
|
||
+ if (ping_info->trans_alpha == (unsigned char *) NULL)
|
||
ThrowWriterException(ResourceLimitError,MemoryAllocationFailed,image);
|
||
assert(number_colors <= 256);
|
||
for (i=0; i < (long) number_colors; i++)
|
||
- ping_info->trans[i]=255;
|
||
+ ping_info->trans_alpha[i]=255;
|
||
for (y=0; y < (long) image->rows; y++)
|
||
{
|
||
register const PixelPacket
|
||
@@ -6254,7 +6255,7 @@
|
||
|
||
index=indexes[x];
|
||
assert((unsigned long) index < number_colors);
|
||
- ping_info->trans[index]=(png_byte) (255-
|
||
+ ping_info->trans_alpha[index]=(png_byte) (255-
|
||
ScaleQuantumToChar(p->opacity));
|
||
}
|
||
p++;
|
||
@@ -6262,14 +6263,14 @@
|
||
}
|
||
ping_info->num_trans=0;
|
||
for (i=0; i < (long) number_colors; i++)
|
||
- if (ping_info->trans[i] != 255)
|
||
+ if (ping_info->trans_alpha[i] != 255)
|
||
ping_info->num_trans=(unsigned short) (i+1);
|
||
if (ping_info->num_trans == 0)
|
||
ping_info->valid&=(~PNG_INFO_tRNS);
|
||
if (!(ping_info->valid & PNG_INFO_tRNS))
|
||
ping_info->num_trans=0;
|
||
if (ping_info->num_trans == 0)
|
||
- MagickFreeMemory(ping_info->trans);
|
||
+ MagickFreeMemory(ping_info->trans_alpha);
|
||
/*
|
||
Identify which colormap entry is the background color.
|
||
*/
|
||
@@ -6388,12 +6389,12 @@
|
||
if (ping_info->bit_depth == 1)
|
||
mask=0x0001;
|
||
ping_info->valid|=PNG_INFO_tRNS;
|
||
- ping_info->trans_values.red=ScaleQuantumToShort(p->red)&mask;
|
||
- ping_info->trans_values.green=ScaleQuantumToShort(p->green)&mask;
|
||
- ping_info->trans_values.blue=ScaleQuantumToShort(p->blue)&mask;
|
||
- ping_info->trans_values.gray=
|
||
+ ping_info->trans_color.red=ScaleQuantumToShort(p->red)&mask;
|
||
+ ping_info->trans_color.green=ScaleQuantumToShort(p->green)&mask;
|
||
+ ping_info->trans_color.blue=ScaleQuantumToShort(p->blue)&mask;
|
||
+ ping_info->trans_color.gray=
|
||
(png_uint_16) ScaleQuantumToShort(PixelIntensity(p))&mask;
|
||
- ping_info->trans_values.index=(unsigned char)
|
||
+ ping_info->trans_color.index=(unsigned char)
|
||
(ScaleQuantumToChar(MaxRGB-p->opacity));
|
||
}
|
||
if (ping_info->valid & PNG_INFO_tRNS)
|
||
@@ -6413,7 +6414,7 @@
|
||
{
|
||
if (p->opacity != OpaqueOpacity)
|
||
{
|
||
- if (!RGBColorMatchExact(ping_info->trans_values,*p))
|
||
+ if (!RGBColorMatchExact(ping_info->trans_color,*p))
|
||
{
|
||
break; /* Can't use RGB + tRNS for multiple
|
||
transparent colors. */
|
||
@@ -6426,7 +6427,7 @@
|
||
}
|
||
else
|
||
{
|
||
- if (RGBColorMatchExact(ping_info->trans_values,*p))
|
||
+ if (RGBColorMatchExact(ping_info->trans_color,*p))
|
||
break; /* Can't use RGB + tRNS when another pixel
|
||
having the same RGB samples is
|
||
transparent. */
|
||
@@ -6444,10 +6445,10 @@
|
||
ping_info->color_type &= 0x03; /* changes 4 or 6 to 0 or 2 */
|
||
if (image->depth == 8)
|
||
{
|
||
- ping_info->trans_values.red&=0xff;
|
||
- ping_info->trans_values.green&=0xff;
|
||
- ping_info->trans_values.blue&=0xff;
|
||
- ping_info->trans_values.gray&=0xff;
|
||
+ ping_info->trans_color.red&=0xff;
|
||
+ ping_info->trans_color.green&=0xff;
|
||
+ ping_info->trans_color.blue&=0xff;
|
||
+ ping_info->trans_color.gray&=0xff;
|
||
}
|
||
}
|
||
}
|
||
@@ -6463,7 +6464,7 @@
|
||
{
|
||
ping_info->color_type=PNG_COLOR_TYPE_GRAY;
|
||
if (save_image_depth == 16 && image->depth == 8)
|
||
- ping_info->trans_values.gray*=0x0101;
|
||
+ ping_info->trans_color.gray*=0x0101;
|
||
}
|
||
if (image->depth > QuantumDepth)
|
||
image->depth=QuantumDepth;
|
||
@@ -6577,14 +6578,14 @@
|
||
/*
|
||
Identify which colormap entry is transparent.
|
||
*/
|
||
- ping_info->trans=MagickAllocateMemory(unsigned char *,
|
||
+ ping_info->trans_alpha=MagickAllocateMemory(unsigned char *,
|
||
number_colors);
|
||
- if (ping_info->trans == (unsigned char *) NULL)
|
||
+ if (ping_info->trans_alpha == (unsigned char *) NULL)
|
||
ThrowWriterException(ResourceLimitError,
|
||
MemoryAllocationFailed,image);
|
||
assert(number_colors <= 256);
|
||
for (i=0; i < (long) number_colors; i++)
|
||
- ping_info->trans[i]=255;
|
||
+ ping_info->trans_alpha[i]=255;
|
||
for (y=0; y < (long) image->rows; y++)
|
||
{
|
||
register const PixelPacket
|
||
@@ -6604,21 +6605,21 @@
|
||
|
||
index=indexes[x];
|
||
assert((unsigned long) index < number_colors);
|
||
- ping_info->trans[index]=(png_byte) (255-
|
||
+ ping_info->trans_alpha[index]=(png_byte) (255-
|
||
ScaleQuantumToChar(p->opacity));
|
||
}
|
||
p++;
|
||
}
|
||
}
|
||
for (i=0; i < (long) number_colors; i++)
|
||
- if (ping_info->trans[i] != 255)
|
||
+ if (ping_info->trans_alpha[i] != 255)
|
||
ping_info->num_trans=(unsigned short) (i+1);
|
||
if (ping_info->num_trans == 0)
|
||
ping_info->valid&=(~PNG_INFO_tRNS);
|
||
if (!(ping_info->valid & PNG_INFO_tRNS))
|
||
ping_info->num_trans=0;
|
||
if (ping_info->num_trans == 0)
|
||
- MagickFreeMemory(ping_info->trans);
|
||
+ MagickFreeMemory(ping_info->trans_alpha);
|
||
}
|
||
|
||
/*
|
||
@@ -6636,10 +6637,10 @@
|
||
image->depth=8;
|
||
if ((save_image_depth == 16) && (image->depth == 8))
|
||
{
|
||
- ping_info->trans_values.red*=0x0101;
|
||
- ping_info->trans_values.green*=0x0101;
|
||
- ping_info->trans_values.blue*=0x0101;
|
||
- ping_info->trans_values.gray*=0x0101;
|
||
+ ping_info->trans_color.red*=0x0101;
|
||
+ ping_info->trans_color.green*=0x0101;
|
||
+ ping_info->trans_color.blue*=0x0101;
|
||
+ ping_info->trans_color.gray*=0x0101;
|
||
}
|
||
}
|
||
|
||
@@ -6666,8 +6667,8 @@
|
||
" Setting up bKGD chunk");
|
||
png_set_bKGD(ping,ping_info,&background);
|
||
|
||
- ping_info->trans_values.gray=(png_uint_16)(maxval*
|
||
- ping_info->trans_values.gray/MaxRGB);
|
||
+ ping_info->trans_color.gray=(png_uint_16)(maxval*
|
||
+ ping_info->trans_color.gray/MaxRGB);
|
||
}
|
||
}
|
||
if (logging)
|
||
@@ -7174,7 +7175,7 @@
|
||
#endif
|
||
if (ping_info->valid & PNG_INFO_tRNS)
|
||
{
|
||
- MagickFreeMemory(ping_info->trans);
|
||
+ MagickFreeMemory(ping_info->trans_alpha);
|
||
ping_info->valid&=(~PNG_INFO_tRNS);
|
||
}
|
||
png_destroy_write_struct(&ping,&ping_info);
|