[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[libcvd-members] libcvd/pnm_src png.cc
From: |
Edward Rosten |
Subject: |
[libcvd-members] libcvd/pnm_src png.cc |
Date: |
Fri, 05 Nov 2010 16:31:29 +0000 |
CVSROOT: /cvsroot/libcvd
Module name: libcvd
Changes by: Edward Rosten <edrosten> 10/11/05 16:31:29
Modified files:
pnm_src : png.cc
Log message:
Fix loading of palletted PNG images with transparency.
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/libcvd/pnm_src/png.cc?cvsroot=libcvd&r1=1.14&r2=1.15
Patches:
Index: png.cc
===================================================================
RCS file: /cvsroot/libcvd/libcvd/pnm_src/png.cc,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -b -r1.14 -r1.15
--- png.cc 5 Nov 2010 15:32:40 -0000 1.14
+++ png.cc 5 Nov 2010 16:31:29 -0000 1.15
@@ -203,6 +203,8 @@
LOG("interlace = " << interlace<< endl);
LOG("channels = " << (int)png_get_channels(png_ptr, info_ptr) << endl);
+ LOG("tRNS? = " << png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS)
<< endl);
+
my_size.x = w;
my_size.y = h;
@@ -231,6 +233,21 @@
else
type = PNM::type_name<unsigned short>::name();
+ //Get rid of palette, by transforming it to RGB
+ if(colour == PNG_COLOR_TYPE_PALETTE)
+ {
+ png_set_palette_to_rgb(png_ptr);
+
+ //Check to see if there is a tRNS palette chunk. Note that the
PNG_COLOR_MASK_ALPHA is
+ //only valid for non indexed images, not paletted ones. So, we
need to check here for
+ //transparency data.
+ if(png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS))
+ {
+ colour |= PNG_COLOR_MASK_ALPHA;
+ png_set_tRNS_to_alpha(png_ptr);
+ }
+ }
+
if(colour & PNG_COLOR_MASK_COLOR)
if(colour & PNG_COLOR_MASK_ALPHA)
@@ -243,10 +260,6 @@
else
type = type;
- //Get rid of palette, by transforming it to RGB
- if(colour == PNG_COLOR_TYPE_PALETTE)
- png_set_palette_to_rgb(png_ptr);
-
if(interlace != PNG_INTERLACE_NONE)
throw Exceptions::Image_IO::UnsupportedImageSubType("PNG",
"Interlace not yet supported");