diff options
| author | Johannes Hofmann <Johannes.Hofmann@gmx.de> | 2008-01-13 21:45:22 +0100 |
|---|---|---|
| committer | Johannes Hofmann <Johannes.Hofmann@gmx.de> | 2008-01-13 21:45:22 +0100 |
| commit | be1fb05e4c4aab33045ab8d777c8980d418d97cc (patch) | |
| tree | 2220cc35f9326e1b4a036fb35e65cfc883b66473 /src | |
| parent | b1994497093380515c59e7ab7c875d4c00e9891d (diff) | |
use : and , as separators
Diffstat (limited to 'src')
| -rw-r--r-- | src/pnmlcms.c | 28 |
1 files changed, 22 insertions, 6 deletions
diff --git a/src/pnmlcms.c b/src/pnmlcms.c index 800af08..426b923 100644 --- a/src/pnmlcms.c +++ b/src/pnmlcms.c @@ -10,6 +10,10 @@ pam_transform(FILE *in_fp, FILE *out_fp, static LPGAMMATABLE buildGammaCurve(const char *ctrl_points, int resolution); + +#define RED 0x1 +#define GREEN 0x2 +#define BLUE 0x4 int main(int argc, char **argv) { int c, i, nProf = 0; @@ -22,8 +26,9 @@ main(int argc, char **argv) { cmsHPROFILE profiles[3]; DWORD type; struct pnm in_pnm; + int channels = 0; - while ((c = getopt(argc, argv, "i:o:g:b:c:h:s:S:D:C:")) != EOF) { + while ((c = getopt(argc, argv, "i:o:rgbc:h:s:S:D:C:")) != EOF) { switch (c) { case 'i': in_prof = optarg; @@ -31,11 +36,14 @@ main(int argc, char **argv) { case 'o': out_prof = optarg; break; + case 'r': + channels |= RED; + break; case 'g': - gamma = atof(optarg); + channels |= GREEN; break; case 'b': - bright = atof(optarg); + channels |= BLUE; break; case 'c': contrast = atof(optarg); @@ -80,8 +88,16 @@ main(int argc, char **argv) { if (curve) { LPGAMMATABLE gTable[3]; + LPGAMMATABLE table, nopTable; - gTable[0] = gTable[1] = gTable[2] = buildGammaCurve(curve, 256); + if (channels == 0) channels = RED | GREEN | BLUE; + + table = buildGammaCurve(curve, 256); + nopTable = cmsBuildGamma(256, 1.0); + + gTable[0] = channels & RED?table:nopTable; + gTable[1] = channels & GREEN?table:nopTable; + gTable[2] = channels & BLUE?table:nopTable; profiles[nProf++] = cmsCreateLinearizationDeviceLink( icSigLabData, @@ -170,14 +186,14 @@ buildGammaCurve(const char *ctrl_points, int resolution) { gsl_interp_accel *acc; gsl_spline *spline; - while (pstr = strsep(&buf, ";")) { + while (pstr = strsep(&buf, ",")) { if (n == MAX_CTRL) { fprintf(stderr, "Maximum number of control points (%d) reached.\n", MAX_CTRL); break; } - if (sscanf(pstr, "%lf,%lf", &X[n], &Y[n]) != 2 || + if (sscanf(pstr, "%lf:%lf", &X[n], &Y[n]) != 2 || X[n] < 0.0 || X[n] > 1.0 || Y[n] < 0.0 || Y[n] > 1.0) { fprintf(stderr, "Could not parse control point %s.\n", pstr); free(buf); |
