diff options
author | giraffedata <giraffedata@9d0c8265-081b-0410-96cb-a4ca84ce46f8> | 2021-10-12 23:40:09 +0000 |
---|---|---|
committer | giraffedata <giraffedata@9d0c8265-081b-0410-96cb-a4ca84ce46f8> | 2021-10-12 23:40:09 +0000 |
commit | 00c38a4486bd4ec06df964d51e8b6e10fa0a0227 (patch) | |
tree | 5293ca3accac3dcbaf9c8ba079a9db0f5a54c36a /converter | |
parent | 059c2601ade1db66a667bd875c73b4b9f51112ec (diff) | |
download | netpbm-mirror-00c38a4486bd4ec06df964d51e8b6e10fa0a0227.tar.gz netpbm-mirror-00c38a4486bd4ec06df964d51e8b6e10fa0a0227.tar.xz netpbm-mirror-00c38a4486bd4ec06df964d51e8b6e10fa0a0227.zip |
Allow 256 colors when image has alpha plane but user says -transparent; no need to reserve a slot for fake transparency color
git-svn-id: http://svn.code.sf.net/p/netpbm/code/trunk@4154 9d0c8265-081b-0410-96cb-a4ca84ce46f8
Diffstat (limited to 'converter')
-rw-r--r-- | converter/other/pamtogif.c | 40 |
1 files changed, 21 insertions, 19 deletions
diff --git a/converter/other/pamtogif.c b/converter/other/pamtogif.c index f7e6470b..341c9c03 100644 --- a/converter/other/pamtogif.c +++ b/converter/other/pamtogif.c @@ -1892,14 +1892,14 @@ computeColormapFromInput(struct pam * const pamP, static void -computeLibnetpbmColormap(struct pam * const pamP, - bool const haveAlpha, - const char * const mapfile, - tuple * const color, - tuplehash * const tuplehashP, - struct pam * const mapPamP, - unsigned int * const colorCountP, - bool const sort) { +computeLibnetpbmColormap(struct pam * const pamP, + enum TransparencyType const transType, + const char * const mapfile, + tuple * const color, + tuplehash * const tuplehashP, + struct pam * const mapPamP, + unsigned int * const colorCountP, + bool const sort) { /*---------------------------------------------------------------------------- Compute a colormap, libnetpbm style, for the image described by 'pamP', which is positioned to the raster. @@ -1913,21 +1913,23 @@ computeLibnetpbmColormap(struct pam * const pamP, The tuples of the color map have a meaningful depth of 1 (grayscale) or 3 (color) and *mapPamP reflects that. - While we're at it, count the colors and validate that there aren't - too many. Return the count as *colorCountP. In determining if there are - too many, allow one slot for a fake transparency color if 'haveAlpha' - is true. If there are too many, issue an error message and abort the + While we're at it, count the colors and validate that there aren't too + many. Return the count as *colorCountP. In determining if there are too + many, allow one slot for a fake transparency color if 'transType' is + 'TRANS_ALPHA'. If there are too many, issue an error message and abort the program. 'sort' means to sort the colormap by red intensity, then by green intensity, then by blue intensity, as opposed to arbitrary order. -----------------------------------------------------------------------------*/ - unsigned int const maxcolors = haveAlpha ? MAXCMAPSIZE - 1 : MAXCMAPSIZE; + unsigned int const maxcolors = + transType == TRANS_ALPHA ? MAXCMAPSIZE - 1 : MAXCMAPSIZE; /* The most colors we can tolerate in the image. If we have our own made-up entry in the colormap for transparency, it isn't included in this count. */ - unsigned int const nInputComp = haveAlpha ? pamP->depth - 1 : pamP->depth; + unsigned int const nInputComp = + pamAlphaPlane(pamP) ? pamP->depth - 1 : pamP->depth; /* Number of color components (not alpha) in the input image */ unsigned int i; @@ -2010,16 +2012,16 @@ main(int argc, char *argv[]) { pm_tell2(ifP, &rasterPos, sizeof(rasterPos)); - computeLibnetpbmColormap(&pam, !!pamAlphaPlane(&pam), cmdline.mapfile, + transType = cmdline.transparent ? TRANS_COLOR : + pamAlphaPlane(&pam) ? TRANS_ALPHA : + TRANS_NONE; + + computeLibnetpbmColormap(&pam, transType, cmdline.mapfile, cmap.color, &cmap.tuplehash, &cmap.pam, &cmap.cmapSize, cmdline.sort); assert(cmap.pam.maxval == pam.maxval); - transType = cmdline.transparent ? TRANS_COLOR : - pamAlphaPlane(&pam) ? TRANS_ALPHA : - TRANS_NONE; - if (transType == TRANS_ALPHA) { /* Add a fake entry to the end of the colormap for transparency. Make its color black. |