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 | |
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')
-rw-r--r-- | converter/other/pngtopam.c | 44 | ||||
-rw-r--r-- | converter/other/pnmtopng.c | 8 |
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: |