diff options
author | giraffedata <giraffedata@9d0c8265-081b-0410-96cb-a4ca84ce46f8> | 2019-01-20 19:22:55 +0000 |
---|---|---|
committer | giraffedata <giraffedata@9d0c8265-081b-0410-96cb-a4ca84ce46f8> | 2019-01-20 19:22:55 +0000 |
commit | 6d06b8e0c26536edaedf04ae56849667b85c1325 (patch) | |
tree | 2fc0bcebd14321d895b479c8a465a6ab69888e68 /editor/pambrighten.c | |
parent | 16b223f52bfbbc2eef71496ffd434dccadb35579 (diff) | |
download | netpbm-mirror-6d06b8e0c26536edaedf04ae56849667b85c1325.tar.gz netpbm-mirror-6d06b8e0c26536edaedf04ae56849667b85c1325.tar.xz netpbm-mirror-6d06b8e0c26536edaedf04ae56849667b85c1325.zip |
Fix handling of floating point imprecision in unnormalizing samples
git-svn-id: http://svn.code.sf.net/p/netpbm/code/trunk@3513 9d0c8265-081b-0410-96cb-a4ca84ce46f8
Diffstat (limited to 'editor/pambrighten.c')
-rw-r--r-- | editor/pambrighten.c | 28 |
1 files changed, 14 insertions, 14 deletions
diff --git a/editor/pambrighten.c b/editor/pambrighten.c index 462c5efe..51bd0d23 100644 --- a/editor/pambrighten.c +++ b/editor/pambrighten.c @@ -96,10 +96,10 @@ parseCommandLine(int argc, static void -changeColorPix(tuple const tupleval, - float const valchange, - float const satchange, - sample const maxval) { +changeColorPix(tuple const tupleval, + float const valchange, + float const satchange, + const struct pam * const pamP) { pixel oldRgb, newRgb; struct hsv oldHsv, newHsv; @@ -107,7 +107,7 @@ changeColorPix(tuple const tupleval, PPM_PUTR(oldRgb, tupleval[PAM_RED_PLANE]); PPM_PUTG(oldRgb, tupleval[PAM_GRN_PLANE]); PPM_PUTB(oldRgb, tupleval[PAM_BLU_PLANE]); - oldHsv = ppm_hsv_from_color(oldRgb, maxval); + oldHsv = ppm_hsv_from_color(oldRgb, pamP->maxval); newHsv.h = oldHsv.h; @@ -115,7 +115,7 @@ changeColorPix(tuple const tupleval, newHsv.v = MIN(1.0, MAX(0.0, oldHsv.v * valchange)); - newRgb = ppm_color_from_hsv(newHsv, maxval); + newRgb = ppm_color_from_hsv(newHsv, pamP->maxval); tupleval[PAM_RED_PLANE] = PPM_GETR(newRgb); tupleval[PAM_GRN_PLANE] = PPM_GETG(newRgb); @@ -125,14 +125,14 @@ changeColorPix(tuple const tupleval, static void -changeGrayPix(tuple const tupleval, - float const valchange, - sample const maxval) { +changeGrayPix(tuple const tupleval, + float const valchange, + struct pam * const pamP) { - double const oldGray = (double) tupleval[0] / maxval; - double const newGray = MIN(1.0, MAX(0.0, oldGray * valchange)); + samplen const oldGray = pnm_normalized_sample(pamP, tupleval[0]); + samplen const newGray = MIN(1.0, MAX(0.0, oldGray * valchange)); - tupleval[0] = ROUNDU(newGray * maxval); + tupleval[0] = pnm_unnormalized_sample(pamP, newGray); } @@ -211,12 +211,12 @@ pambrighten(struct CmdlineInfo const cmdline, case COLORTYPE_COLOR: changeColorPix(tuplerow[col], cmdline.valchange, cmdline.satchange, - inpam.maxval); + &inpam); break; case COLORTYPE_GRAY: changeGrayPix(tuplerow[col], cmdline.valchange, - inpam.maxval); + &inpam); break; case COLORTYPE_BW: /* Nothing to change. */ |