about summary refs log tree commit diff
path: root/converter/other
diff options
context:
space:
mode:
authorgiraffedata <giraffedata@9d0c8265-081b-0410-96cb-a4ca84ce46f8>2009-09-04 07:01:30 +0000
committergiraffedata <giraffedata@9d0c8265-081b-0410-96cb-a4ca84ce46f8>2009-09-04 07:01:30 +0000
commitdbce489c0af38aa596c871612dc42b29c72842f3 (patch)
treeecda08473e50c3c42a521bf3a22e61232f58ac57 /converter/other
parentbfe58977ba6c6386d020a1355561e1102d907884 (diff)
downloadnetpbm-mirror-dbce489c0af38aa596c871612dc42b29c72842f3.tar.gz
netpbm-mirror-dbce489c0af38aa596c871612dc42b29c72842f3.tar.xz
netpbm-mirror-dbce489c0af38aa596c871612dc42b29c72842f3.zip
Use png_get_tRNS, png_set_tRNS instead of direct access to png struct so it works with libpng 1.4
git-svn-id: http://svn.code.sf.net/p/netpbm/code/trunk@981 9d0c8265-081b-0410-96cb-a4ca84ce46f8
Diffstat (limited to 'converter/other')
-rw-r--r--converter/other/pngtopam.c44
-rw-r--r--converter/other/pnmtopng.c8
2 files changed, 41 insertions, 11 deletions
diff --git a/converter/other/pngtopam.c b/converter/other/pngtopam.c
index 16acc293..e88338c4 100644
--- a/converter/other/pngtopam.c
+++ b/converter/other/pngtopam.c
@@ -670,15 +670,20 @@ paletteHasPartialTransparency(struct pngx * const pngxP) {
     bool retval;
 
     if (pngxP->info_ptr->color_type == PNG_COLOR_TYPE_PALETTE) {
-        if (pngxP->info_ptr->valid & PNG_INFO_tRNS) {
+        if (pngx_chunkIsPresent(pngxP, PNG_INFO_tRNS)) {
             bool foundGray;
             unsigned int i;
+            png_bytep trans;
+            int numTrans;
+            png_color_16 * transColorP;
             
+            png_get_tRNS(pngxP->png_ptr, pngxP->info_ptr,
+                         &trans, &numTrans, &transColorP);
+
             for (i = 0, foundGray = FALSE;
-                 i < pngxP->info_ptr->num_trans && !foundGray;
+                 i < numTrans && !foundGray;
                  ++i) {
-                if (pngxP->info_ptr->trans[i] != 0 &&
-                    pngxP->info_ptr->trans[i] != maxval) {
+                if (trans[i] != 0 && trans[i] != maxval) {
                     foundGray = TRUE;
                 }
             }
@@ -1053,6 +1058,33 @@ warnNonsquarePixels(struct pngx * const pngxP,
 
 
 
+static png_uint_16
+paletteAlpha(struct pngx * const pngxP,
+             png_uint_16   const index,
+             sample        const maxval) {
+
+    png_uint_16 retval;
+
+    if (pngx_chunkIsPresent(pngxP, PNG_INFO_tRNS)) {
+        png_bytep      trans;
+        int            numTrans;
+        png_color_16 * transColorP;
+
+        png_get_tRNS(pngxP->png_ptr, pngxP->info_ptr,
+                     &trans, &numTrans, &transColorP);
+
+        if (index < numTrans)
+            retval = trans[index];
+        else
+            retval = maxval;
+    } else
+        retval = maxval;
+
+    return retval;
+}
+
+
+
 #define GET_PNG_VAL(p) getPngVal(&(p), pngxP->info_ptr->bit_depth)
 
 
@@ -1103,9 +1135,7 @@ makeTupleRow(const struct pam *  const pamP,
             fgColor.b = paletteColor.blue;
 
             setTuple(pamP, tuplerow[col], fgColor, bgColor, alphaHandling,
-                     (pngxP->info_ptr->valid & PNG_INFO_tRNS) &&
-                     index < pngxP->info_ptr->num_trans ?
-                     pngxP->info_ptr->trans[index] : maxval);
+                     paletteAlpha(pngxP, index, maxval));
         }
         break;
                 
diff --git a/converter/other/pnmtopng.c b/converter/other/pnmtopng.c
index 99e2f94d..6cef96ad 100644
--- a/converter/other/pnmtopng.c
+++ b/converter/other/pnmtopng.c
@@ -2449,10 +2449,10 @@ doTrnsChunk(struct pngx * const pngxP,
     switch (pngxP->info_ptr->color_type) {
     case PNG_COLOR_TYPE_PALETTE:
         if (transPaletteSize > 0) {
-            pngxP->info_ptr->valid |= PNG_INFO_tRNS;
-            pngxP->info_ptr->trans = (png_byte *)transPalette;
-            pngxP->info_ptr->num_trans = transPaletteSize;
-            /* omit opaque values */
+            png_set_tRNS(pngxP->png_ptr, pngxP->info_ptr,
+                         (png_byte *)transPalette,
+                         transPaletteSize /* omit opaque values */,
+                         0);
         }
         break;
     case PNG_COLOR_TYPE_GRAY: