diff options
-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: |