[tex-k] web2c vs. png-1.5
Thomas Klausner
tk at giga.or.at
Sun Jan 30 00:06:27 CET 2011
Hi!
png-1.5 hides structure members from public view. For this reason,
some code doesn't compile any more.
The attached patches fix the problem.
I wasn't sure how to fix the png_transformations part of the patch; I
asked the png people and was told by a png developer, John Bowler,
that the check as-is doesn't make sense. His full reply is available
at http://sourceforge.net/mailarchive/message.php?msg_id=26908171
So I think the patch should be fine as-is. It seems to still be needed
in the current development trunk, AFAICT. Please apply it or something
similar.
Thanks,
Thomas
-------------- next part --------------
$NetBSD: patch-aa,v 1.3 2011/01/16 15:07:16 wiz Exp $
Fix to build with png-1.5.
--- pdftexdir/writeimg.c.orig 2010-05-02 13:21:48.000000000 +0000
+++ pdftexdir/writeimg.c
@@ -137,7 +137,7 @@ integer imagecolordepth(integer img)
{
switch (img_type(img)) {
case IMAGE_TYPE_PNG:
- return png_info(img)->bit_depth;
+ return png_get_bit_depth(png_ptr(img), png_info(img));
case IMAGE_TYPE_JPG:
return jpg_ptr(img)->bits_per_component;
case IMAGE_TYPE_JBIG2:
@@ -389,7 +389,7 @@ void deleteimage(integer img)
epdf_delete();
break;
case IMAGE_TYPE_PNG:
- xfclose((FILE *) png_ptr(img)->io_ptr, cur_file_name);
+ xfclose((FILE *) png_get_io_ptr(png_ptr(img)), cur_file_name);
png_destroy_read_struct(&(png_ptr(img)), &(png_info(img)), NULL);
break;
case IMAGE_TYPE_JPG:
-------------- next part --------------
$NetBSD: patch-ab,v 1.4 2011/01/17 10:36:54 wiz Exp $
Fix to build with png-1.5.
->transformations part removed on recommendation by John Bowler.
--- pdftexdir/writepng.c.orig 2010-06-22 15:35:42.000000000 +0000
+++ pdftexdir/writepng.c
@@ -33,7 +33,6 @@ Franklin Street, Fifth Floor, Boston, MA
#define png_height(N) png_get_image_height(png_ptr(N), png_info(N))
#define png_interlace_type(N) png_get_interlace_type(png_ptr(N), png_info(N))
#define png_io_ptr(N) png_get_io_ptr(png_ptr(N))
-#define png_num_palette(N) png_info(N)->num_palette
#define png_palette(N) png_info(N)->palette
#define png_rowbytes(N) png_get_rowbytes(png_ptr(N), png_info(N))
#define png_transformations(N) png_ptr(N)->transformations
@@ -50,7 +49,6 @@ Franklin Street, Fifth Floor, Boston, MA
#define png_height(N) png_info(N)->height
#define png_interlace_type(N) png_info(N)->interlace_type
#define png_io_ptr(N) png_ptr(N)->io_ptr
-#define png_num_palette(N) png_info(N)->num_palette
#define png_palette(N) png_info(N)->palette
#define png_rowbytes(N) png_info(N)->rowbytes
#define png_transformations(N) png_ptr(N)->transformations
@@ -201,14 +199,18 @@ static void write_png_palette(integer im
int i, j, k, l;
png_bytep row, r, *rows;
integer palette_objnum = 0;
+ png_colorp palette;
+ int num_palette;
+
+ png_get_PLTE(png_ptr(img), png_info(img), &palette, &num_palette);
+
pdfcreateobj(0, 0);
palette_objnum = objptr;
if (img_colorspace_ref(img) != 0) {
pdf_printf("%i 0 R\n", (int) img_colorspace_ref(img));
} else {
pdf_printf("[/Indexed /DeviceRGB %i %i 0 R]\n",
- (int) (png_num_palette(img) - 1),
- (int) palette_objnum);
+ num_palette -1, (int) palette_objnum);
}
pdfbeginstream();
if (png_interlace_type(img) == PNG_INTERLACE_NONE) {
@@ -230,11 +232,11 @@ static void write_png_palette(integer im
if (palette_objnum > 0) {
pdfbegindict(palette_objnum, 0);
pdfbeginstream();
- for (i = 0; (unsigned) i < png_num_palette(img); i++) {
+ for (i = 0; (unsigned) i < num_palette; i++) {
pdfroom(3);
- pdfbuf[pdfptr++] = png_palette(img)[i].red;
- pdfbuf[pdfptr++] = png_palette(img)[i].green;
- pdfbuf[pdfptr++] = png_palette(img)[i].blue;
+ pdfbuf[pdfptr++] = palette[i].red;
+ pdfbuf[pdfptr++] = palette[i].green;
+ pdfbuf[pdfptr++] = palette[i].blue;
}
pdfendstream();
}
@@ -553,7 +555,12 @@ void write_png(integer img)
double gamma, checked_gamma;
int i;
integer palette_objnum = 0;
+ png_colorp palette;
+ int num_palette;
last_png_needs_page_group = false;
+
+ png_get_PLTE(png_ptr(img), png_info(img), &palette, &num_palette);
+
if (fixedpdfminorversion < 5)
fixedimagehicolor = 0;
@@ -574,8 +581,6 @@ void write_png(integer img)
*/
if (fixedpdfminorversion > 1
&& png_interlace_type(img) == PNG_INTERLACE_NONE
- && (png_transformations(img) == PNG_TRANSFORM_IDENTITY
- || png_transformations(img) == 0x2000)
/* gamma */
&& !(png_ptr_color_type(img) == PNG_COLOR_TYPE_GRAY_ALPHA ||
png_ptr_color_type(img) == PNG_COLOR_TYPE_RGB_ALPHA)
@@ -590,8 +595,7 @@ void write_png(integer img)
pdfcreateobj(0, 0);
palette_objnum = objptr;
pdf_printf("[/Indexed /DeviceRGB %i %i 0 R]\n",
- (int) (png_num_palette(img) - 1),
- (int) palette_objnum);
+ num_palette - 1, (int) palette_objnum);
break;
case PNG_COLOR_TYPE_GRAY:
pdf_puts("/DeviceGray\n");
@@ -605,11 +609,11 @@ void write_png(integer img)
if (palette_objnum > 0) {
pdfbegindict(palette_objnum, 0);
pdfbeginstream();
- for (i = 0; i < png_num_palette(img); i++) {
+ for (i = 0; i < num_palette; i++) {
pdfroom(3);
- pdfbuf[pdfptr++] = png_palette(img)[i].red;
- pdfbuf[pdfptr++] = png_palette(img)[i].green;
- pdfbuf[pdfptr++] = png_palette(img)[i].blue;
+ pdfbuf[pdfptr++] = palette[i].red;
+ pdfbuf[pdfptr++] = palette[i].green;
+ pdfbuf[pdfptr++] = palette[i].blue;
}
pdfendstream();
}
@@ -619,9 +623,6 @@ void write_png(integer img)
if (fixedimageapplygamma &&
(checked_gamma > 1.01 || checked_gamma < 0.99))
tex_printf("gamma delta=%lf ", checked_gamma);
- if (png_transformations(img) != PNG_TRANSFORM_IDENTITY)
- tex_printf("transform=%lu",
- (long) png_transformations(img));
if ((png_color_type(img) != PNG_COLOR_TYPE_GRAY)
&& (png_color_type(img) != PNG_COLOR_TYPE_RGB)
&& (png_color_type(img) != PNG_COLOR_TYPE_PALETTE))
More information about the tex-k
mailing list