libcvd-members
[Top][All Lists]
Advanced

[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");
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]