diff options
author | giraffedata <giraffedata@9d0c8265-081b-0410-96cb-a4ca84ce46f8> | 2023-06-28 17:29:32 +0000 |
---|---|---|
committer | giraffedata <giraffedata@9d0c8265-081b-0410-96cb-a4ca84ce46f8> | 2023-06-28 17:29:32 +0000 |
commit | 23ce26f64c34e30951ad9ade2151552ed77e7357 (patch) | |
tree | d73b31a0c2f7c7be4a69f8a8e84e00dd39c432b5 /editor/pamfunc.c | |
parent | 1b6e51a266008348ad93ed8b6ac9ec91b5024fea (diff) | |
download | netpbm-mirror-23ce26f64c34e30951ad9ade2151552ed77e7357.tar.gz netpbm-mirror-23ce26f64c34e30951ad9ade2151552ed77e7357.tar.xz netpbm-mirror-23ce26f64c34e30951ad9ade2151552ed77e7357.zip |
promote Advanced to Stable
git-svn-id: http://svn.code.sf.net/p/netpbm/code/stable@4558 9d0c8265-081b-0410-96cb-a4ca84ce46f8
Diffstat (limited to 'editor/pamfunc.c')
-rw-r--r-- | editor/pamfunc.c | 28 |
1 files changed, 16 insertions, 12 deletions
diff --git a/editor/pamfunc.c b/editor/pamfunc.c index 454e6d63..b85cfe9b 100644 --- a/editor/pamfunc.c +++ b/editor/pamfunc.c @@ -10,7 +10,7 @@ ENHANCEMENT IDEAS: 1) speed up by doing integer arithmetic instead of floating point for - multiply/divide where possible. Especially when multiplying by an + multiply/divide where possible. Especially when multiplying by an integer. 2) speed up by not transforming the raster in the idempotent cases @@ -20,6 +20,7 @@ #include "pm_c_util.h" #include "mallocvar.h" +#include "nstring.h" #include "shhopt.h" #include "pam.h" @@ -78,7 +79,7 @@ parseHex(const char * const hexString) { return retval; } - + static void parseCommandLine(int argc, const char ** const argv, @@ -103,7 +104,7 @@ parseCommandLine(int argc, const char ** const argv, MALLOCARRAY(option_def, 100); option_def_index = 0; /* incremented by OPTENT3 */ - OPTENT3(0, "multiplier", OPT_FLOAT, &cmdlineP->u.multiplier, + OPTENT3(0, "multiplier", OPT_FLOAT, &cmdlineP->u.multiplier, &multiplierSpec, 0); OPTENT3(0, "divisor", OPT_FLOAT, &cmdlineP->u.divisor, &divisorSpec, 0); @@ -150,12 +151,12 @@ parseCommandLine(int argc, const char ** const argv, if (multiplierSpec) { cmdlineP->function = FN_MULTIPLY; if (cmdlineP->u.multiplier < 0) - pm_error("Multiplier must be nonnegative. You specified %f", + pm_error("Multiplier must be nonnegative. You specified %f", cmdlineP->u.multiplier); } else if (divisorSpec) { cmdlineP->function = FN_DIVIDE; if (cmdlineP->u.divisor < 0) - pm_error("Divisor must be nonnegative. You specified %f", + pm_error("Divisor must be nonnegative. You specified %f", cmdlineP->u.divisor); } else if (adderSpec) { cmdlineP->function = FN_ADD; @@ -180,20 +181,20 @@ parseCommandLine(int argc, const char ** const argv, cmdlineP->function = FN_SHIFTLEFT; } else if (shiftrightSpec) { cmdlineP->function = FN_SHIFTRIGHT; - } else + } else pm_error("You must specify one of -multiplier, -divisor, " "-adder, -subtractor, -min, -max, " "-and, -or, -xor, -not, -shiftleft, or -shiftright"); - + if (argc-1 > 1) pm_error("Too many arguments (%d). File spec is the only argument.", argc-1); if (argc-1 < 1) cmdlineP->inputFileName = "-"; - else + else cmdlineP->inputFileName = argv[1]; - + free(option_def); } @@ -336,7 +337,7 @@ applyFunction(struct CmdlineInfo const cmdline, 1/cmdline.u.divisor instead of divide by cmdline.u.divisor, so we compute that here. Note that if the function isn't divide, both cmdline.u.divisor and oneOverDivisor are - meaningless. + meaningless. */ unsigned int col; @@ -388,7 +389,7 @@ applyFunction(struct CmdlineInfo const cmdline, outputRow[col][plane] = MIN(outpam.maxval, outSample); } } -} +} @@ -422,6 +423,9 @@ main(int argc, const char *argv[]) { planTransform(cmdline, inpam.maxval, outpam.format, &outpam.maxval, &mustChangeRaster); + if (outpam.maxval > 1 && strneq(outpam.tuple_type, "BLACKANDWHITE", 13)) + strcpy(outpam.tuple_type, ""); + pnm_writepaminit(&outpam); outputRow = pnm_allocpamrow(&outpam); @@ -440,7 +444,7 @@ main(int argc, const char *argv[]) { pnm_freepamrow(inputRow); pm_close(inpam.file); pm_close(outpam.file); - + return 0; } |