diff options
author | giraffedata <giraffedata@9d0c8265-081b-0410-96cb-a4ca84ce46f8> | 2009-09-04 07:01:30 +0000 |
---|---|---|
committer | giraffedata <giraffedata@9d0c8265-081b-0410-96cb-a4ca84ce46f8> | 2009-09-04 07:01:30 +0000 |
commit | dbce489c0af38aa596c871612dc42b29c72842f3 (patch) | |
tree | ecda08473e50c3c42a521bf3a22e61232f58ac57 /converter/other/pngtopam.c | |
parent | bfe58977ba6c6386d020a1355561e1102d907884 (diff) | |
download | netpbm-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/pngtopam.c')
-rw-r--r-- | converter/other/pngtopam.c | 44 |
1 files changed, 37 insertions, 7 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; |