diff options
author | giraffedata <giraffedata@9d0c8265-081b-0410-96cb-a4ca84ce46f8> | 2015-06-28 15:07:46 +0000 |
---|---|---|
committer | giraffedata <giraffedata@9d0c8265-081b-0410-96cb-a4ca84ce46f8> | 2015-06-28 15:07:46 +0000 |
commit | 9dc89a752e79c37118b1d912785a6d748f41ba55 (patch) | |
tree | 56b3b7e24ed29326621c77da70ca9aa3596e8e59 | |
parent | 55076470e9af83d2c99a2443e813f680851fd8a8 (diff) | |
download | netpbm-mirror-9dc89a752e79c37118b1d912785a6d748f41ba55.tar.gz netpbm-mirror-9dc89a752e79c37118b1d912785a6d748f41ba55.tar.xz netpbm-mirror-9dc89a752e79c37118b1d912785a6d748f41ba55.zip |
Add -srgbintent
git-svn-id: http://svn.code.sf.net/p/netpbm/code/trunk@2579 9d0c8265-081b-0410-96cb-a4ca84ce46f8
-rw-r--r-- | converter/other/pnmtopng.c | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/converter/other/pnmtopng.c b/converter/other/pnmtopng.c index 38a6597b..8cf9f92e 100644 --- a/converter/other/pnmtopng.c +++ b/converter/other/pnmtopng.c @@ -120,6 +120,8 @@ struct cmdlineInfo { struct pngx_chroma rgb; /* Meaningless if !rgbSpec */ unsigned int sizeSpec; struct pngx_phys size; /* Meaningless if !sizeSpec */ + unsigned int srgbintentSpec; + pngx_srgbIntent srgbintent; const char * text; /* NULL if none */ const char * ztxt; /* NULL if none */ unsigned int modtimeSpec; @@ -199,6 +201,27 @@ parseRgbOpt(const char * const rgbOpt, static void +parseSrgbintentOpt(const char * const srgbintentOpt, + pngx_srgbIntent * const srgbintentP) { + + if (streq(srgbintentOpt, "perceptual")) + *srgbintentP = PNGX_PERCEPTUAL; + else if (streq(srgbintentOpt, "relativecolorimetric")) + *srgbintentP = PNGX_RELATIVE_COLORIMETRIC; + else if (streq(srgbintentOpt, "saturation")) + *srgbintentP = PNGX_SATURATION; + else if (streq(srgbintentOpt, "absolutecolorimetric")) + *srgbintentP = PNGX_ABSOLUTE_COLORIMETRIC; + else + pm_error("Unrecognized sRGB intent value '%s'. We understand " + "only 'perceptual', 'relativecolorimetric', " + "'saturation', and 'absolutecolorimetric'", + srgbintentOpt); +} + + + +static void parseModtimeOpt(const char * const modtimeOpt, time_t * const modtimeP) { @@ -292,6 +315,7 @@ parseCommandLine(int argc, const char ** argv, const char * modtime; const char * compMethod; const char * compStrategy; + const char * srgbintent; MALLOCARRAY_NOFAIL(option_def, 100); @@ -306,6 +330,8 @@ parseCommandLine(int argc, const char ** argv, &cmdlineP->rgbSpec, 0); OPTENT3(0, "size", OPT_STRING, &size, &cmdlineP->sizeSpec, 0); + OPTENT3(0, "srgbintent", OPT_STRING, &srgbintent, + &cmdlineP->srgbintentSpec, 0); OPTENT3(0, "text", OPT_STRING, &cmdlineP->text, &textSpec, 0); OPTENT3(0, "ztxt", OPT_STRING, &cmdlineP->ztxt, @@ -433,6 +459,9 @@ parseCommandLine(int argc, const char ** argv, if (cmdlineP->rgbSpec) parseRgbOpt(rgb, &cmdlineP->rgb); + if (cmdlineP->srgbintentSpec) + parseSrgbintentOpt(srgbintent, &cmdlineP->srgbintent); + if (cmdlineP->modtimeSpec) parseModtimeOpt(modtime, &cmdlineP->modtime); @@ -2601,6 +2630,20 @@ doSbitChunk(struct pngx * const pngxP, +static void +addSrgbChunk(struct pngx * const pngxP, + pngx_srgbIntent const srgbIntent) { + + pngx_setSrgb(pngxP, srgbIntent); + + if (verbose) { + pm_message("writing sRGB chunk with intent value %s", + pngx_srgbIntentDesc(srgbIntent)); + } +} + + + static void convertpnm(struct cmdlineInfo const cmdline, FILE * const ifP, @@ -2810,6 +2853,9 @@ convertpnm(struct cmdlineInfo const cmdline, doSbitChunk(pngxP, pngMaxval, maxval, alpha, alphaMaxval); + if (cmdline.srgbintentSpec) + addSrgbChunk(pngxP, cmdline.srgbintent); + /* tEXT and zTXT chunks */ if (cmdline.text || cmdline.ztxt) pngtxt_read(pngxP, tfP, !!cmdline.ztxt, cmdline.verbose); |