DO NOT REPLY TO THIS MESSAGE. INSTEAD, POST ANY RESPONSES TO THE LINK BELOW.
[STR Active]
Link: http://www.fltk.org/str.php?L2542
Version: 1.1.10
Thanks for the patch - your 2nd version works ... almost ;-)
We need to init num_trans, because png_get_tRNS() returns valid data only,
if the corresponding chunk has been read, i.e. only for images *with*
transparency.
The attached patch libpng-1.5.diff fixes this. I also removed two
otherwise unused variables and set the corresponding pointers in
png_get_tRNS() to 0 (NULL).
This works well for all images in the above mentioned pngsuite.
Note on how to test easily:
- use your browser to view http://www.libpng.org/pub/png/pngsuite.html
- save the file with images to your local disk
- use test/help to view the saved file (works flawlessly for me)
- compare browser and help view.
If this doesn't work, use test/pixmap_browser to view individual files.
How to proceed:
Although the patch works, I'm not yet going to commit it, because I'm
waiting for feedback from Mike concerning his modifications in FLTK 1.3.
However, either this patch or another one will eventually be available in
FLTK 1.1.11.
Link: http://www.fltk.org/str.php?L2542
Version: 1.1.10
Index: src/Fl_PNG_Image.cxx
===================================================================
--- src/Fl_PNG_Image.cxx (Revision 8485)
+++ src/Fl_PNG_Image.cxx (Arbeitskopie)
@@ -66,6 +66,7 @@
png_structp pp; // PNG read pointer
png_infop info; // PNG info pointers
png_bytep *rows; // PNG row pointers
+ int num_trans = 0; // PNG # of transp. colors
// Open the PNG file...
@@ -75,7 +76,7 @@
pp = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
info = png_create_info_struct(pp);
- if (setjmp(pp->jmpbuf))
+ if (setjmp(png_jmpbuf(pp)))
{
Fl::warning("PNG file \"%s\" contains errors!\n", png);
return;
@@ -87,27 +88,28 @@
// Get the image dimensions and convert to grayscale or RGB...
png_read_info(pp, info);
- if (info->color_type == PNG_COLOR_TYPE_PALETTE)
+ if (png_get_color_type(pp, info) == PNG_COLOR_TYPE_PALETTE)
png_set_expand(pp);
- if (info->color_type & PNG_COLOR_MASK_COLOR)
+ if (png_get_color_type(pp, info) & PNG_COLOR_MASK_COLOR)
channels = 3;
else
channels = 1;
- if ((info->color_type & PNG_COLOR_MASK_ALPHA) || info->num_trans)
+ png_get_tRNS(pp, info, 0, &num_trans, 0);
+ if ((png_get_color_type(pp, info) & PNG_COLOR_MASK_ALPHA) || num_trans)
channels ++;
- w((int)(info->width));
- h((int)(info->height));
+ w((int)(png_get_image_width(pp, info)));
+ h((int)(png_get_image_height(pp, info)));
d(channels);
- if (info->bit_depth < 8)
+ if (png_get_bit_depth(pp, info) < 8)
{
png_set_packing(pp);
png_set_expand(pp);
}
- else if (info->bit_depth == 16)
+ else if (png_get_bit_depth(pp, info) == 16)
png_set_strip_16(pp);
# if defined(HAVE_PNG_GET_VALID) && defined(HAVE_PNG_SET_TRNS_TO_ALPHA)
_______________________________________________
fltk-bugs mailing list
[email protected]
http://lists.easysw.com/mailman/listinfo/fltk-bugs