diff options
author | giraffedata <giraffedata@9d0c8265-081b-0410-96cb-a4ca84ce46f8> | 2017-09-23 15:30:39 +0000 |
---|---|---|
committer | giraffedata <giraffedata@9d0c8265-081b-0410-96cb-a4ca84ce46f8> | 2017-09-23 15:30:39 +0000 |
commit | c22054ea3cd1d98feec30f3dc6ddfbea9afbd868 (patch) | |
tree | 9298f9eb4605cbbe01fa516644ac593bdc8f744b /converter/other/pnmtopalm | |
parent | cc8cbc657bf78563fe1f43c157e8d1db29681a13 (diff) | |
download | netpbm-mirror-c22054ea3cd1d98feec30f3dc6ddfbea9afbd868.tar.gz netpbm-mirror-c22054ea3cd1d98feec30f3dc6ddfbea9afbd868.tar.xz netpbm-mirror-c22054ea3cd1d98feec30f3dc6ddfbea9afbd868.zip |
cleanup
git-svn-id: http://svn.code.sf.net/p/netpbm/code/trunk@3072 9d0c8265-081b-0410-96cb-a4ca84ce46f8
Diffstat (limited to 'converter/other/pnmtopalm')
-rw-r--r-- | converter/other/pnmtopalm/pnmtopalm.c | 59 |
1 files changed, 38 insertions, 21 deletions
diff --git a/converter/other/pnmtopalm/pnmtopalm.c b/converter/other/pnmtopalm/pnmtopalm.c index 58f1023f..f8c4259d 100644 --- a/converter/other/pnmtopalm/pnmtopalm.c +++ b/converter/other/pnmtopalm/pnmtopalm.c @@ -175,6 +175,30 @@ parseCommandLine(int argc, const char ** argv, struct CmdlineInfo *cmdlineP) { +static xelval +scaleSample(pixval const arg, + pixval const oldMaxval, + pixval const newMaxval) { + + return (arg * newMaxval + newMaxval/2) / oldMaxval; +} + + + +static ColormapEntry +colormapEntryColorFmXel(xel const color, + xelval const maxval, + xelval const newMaxval) { + + return + 0 + | (scaleSample(PPM_GETR(color), maxval, newMaxval) << 16) + | (scaleSample(PPM_GETG(color), maxval, newMaxval) << 8) + | (scaleSample(PPM_GETB(color), maxval, newMaxval) << 0); +} + + + static void determinePalmFormatPgm(xelval const maxval, bool const bppSpecified, @@ -231,12 +255,8 @@ validateImageAgainstStandardColormap(const Colormap * const colormapP, unsigned int col; for (col = 0; col < cols; ++col) { - xel const color = xels[row][col]; - ColormapEntry const searchTarget = - ((((PPM_GETR(color)*255) / maxval) << 16) - | (((PPM_GETG(color)*255) / maxval) << 8) - | ((PPM_GETB(color)*255) / maxval)); + colormapEntryColorFmXel(xels[row][col], maxval, 255); ColormapEntry * const foundEntryP = (bsearch(&searchTarget, @@ -436,9 +456,7 @@ findTransparentColor(const char * const colorSpec, *transcolorP = ppm_parsecolor(colorSpec, maxval); if (!directColor) { ColormapEntry const searchTarget = - ((((PPM_GETR(*transcolorP)*newMaxval) / maxval) << 16) - | (((PPM_GETG(*transcolorP)*newMaxval) / maxval) << 8) - | ((PPM_GETB(*transcolorP)*newMaxval) / maxval)); + colormapEntryColorFmXel(*transcolorP, maxval, newMaxval); ColormapEntry * const foundEntryP = (bsearch(&searchTarget, colormapP->color_entries, colormapP->ncolors, @@ -609,9 +627,9 @@ writeRemainingHeaderHigh(unsigned int const bpp, if (bpp == 16) { /* Blind guess here */ fputc(0, stdout); - fputc((PPM_GETR(transcolor) * 255) / maxval, stdout); - fputc((PPM_GETG(transcolor) * 255) / maxval, stdout); - fputc((PPM_GETB(transcolor) * 255) / maxval, stdout); + fputc(scaleSample(PPM_GETR(transcolor), maxval, 255), stdout); + fputc(scaleSample(PPM_GETG(transcolor), maxval, 255), stdout); + fputc(scaleSample(PPM_GETB(transcolor), maxval, 255), stdout); } else { assert(transindex <= UCHAR_MAX); fputc(0, stdout); @@ -685,9 +703,9 @@ writeColormap(bool const explicitColormap, bpp); if (transparent) { fputc(0, stdout); - fputc((PPM_GETR(transcolor) * 255) / maxval, stdout); - fputc((PPM_GETG(transcolor) * 255) / maxval, stdout); - fputc((PPM_GETB(transcolor) * 255) / maxval, stdout); + fputc(scaleSample(PPM_GETR(transcolor) , maxval, 255), stdout); + fputc(scaleSample(PPM_GETG(transcolor) , maxval, 255), stdout); + fputc(scaleSample(PPM_GETB(transcolor) , maxval, 255), stdout); } else pm_writebiglong(stdout, 0); /* no transparent color */ } @@ -717,9 +735,10 @@ computeRawRowDirectColor(const xel * const xelrow, for (col = 0, outCursor = &rowdata[0]; col < cols; ++col) { unsigned int const color = - ((((PPM_GETR(xelrow[col])*31)/maxval) << 11) | - (((PPM_GETG(xelrow[col])*63)/maxval) << 5) | - ((PPM_GETB(xelrow[col])*31)/maxval)); + (scaleSample(PPM_GETR(xelrow[col]), maxval, 31) << 11) | + (scaleSample(PPM_GETG(xelrow[col]), maxval, 63) << 5) | + (scaleSample(PPM_GETB(xelrow[col]), maxval, 31) << 0); + *outCursor++ = (color >> 8) & 0xFF; *outCursor++ = color & 0xFF; } @@ -773,9 +792,7 @@ computeRawRowNonDirect(const xel * const xelrow, color = newMaxval - color; /* note grayscale maps are inverted */ } else { ColormapEntry const searchTarget = - ((((PPM_GETR(xelrow[col])*newMaxval)/maxval)<<16) - | (((PPM_GETG(xelrow[col])*newMaxval)/maxval)<<8) - | (((PPM_GETB(xelrow[col])*newMaxval)/maxval))); + colormapEntryColorFmXel(xelrow[col], maxval, newMaxval); ColormapEntry * const foundEntryP = bsearch(&searchTarget, colormapP->color_entries, @@ -783,7 +800,7 @@ computeRawRowNonDirect(const xel * const xelrow, sizeof(ColormapEntry), palmcolor_compare_colors); if (!foundEntryP) { - pm_error("Color %d:%d:%d not found in colormap. " + pm_error("Color %u:%u:%u not found in colormap. " "Try using pnmquant to reduce the " "number of colors.", PPM_GETR(xelrow[col]), |