--- ray/src/px/macbethcal.c 1997/01/30 19:14:11 2.12 +++ ray/src/px/macbethcal.c 1997/01/31 15:56:17 2.13 @@ -106,7 +106,8 @@ long inpflags = 0; /* flags of which colors were inpu long gmtflags = 0; /* flags of out-of-gamut colors */ COLOR bramp[NMBNEU][2]; /* brightness ramp (per primary) */ -double solmat[3][3]; /* color mapping matrix */ +COLORMAT solmat; /* color mapping matrix */ +COLOR colmin, colmax; /* gamut limits */ FILE *debugfp = NULL; /* debug output picture */ char *progname; @@ -158,11 +159,11 @@ char **argv; } /* open files */ if (i < argc && freopen(argv[i], "r", stdin) == NULL) { - perror(argv[1]); + perror(argv[i]); exit(1); } if (i+1 < argc && freopen(argv[i+1], "w", stdout) == NULL) { - perror(argv[2]); + perror(argv[i+1]); exit(1); } if (scanning) { /* load input picture header */ @@ -385,7 +386,7 @@ compute() /* compute color mapping */ COLOR clrin[24], clrout[24]; long cflags; COLOR ctmp; - register int i, j, n; + register int i, n; /* did we get what we need? */ if ((inpflags & REQFLGS) != REQFLGS) { fprintf(stderr, "%s: missing required input colors\n", @@ -397,6 +398,23 @@ compute() /* compute color mapping */ copycolor(bramp[i][0], inpRGB[mbneu[i]]); copycolor(bramp[i][1], mbRGB[mbneu[i]]); } + /* compute color space gamut */ + if (scanning) { + copycolor(colmin, cblack); + copycolor(colmax, cwhite); + } else + for (i = 0; i < 3; i++) { + colval(colmin,i) = colval(bramp[0][0],i) - + colval(bramp[0][1],i) * + (colval(bramp[1][0],i)-colval(bramp[0][0],i)) / + (colval(bramp[1][1],i)-colval(bramp[1][0],i)); + colval(colmax,i) = colval(bramp[NMBNEU-2][0],i) + + (1.-colval(bramp[NMBNEU-2][1],i)) * + (colval(bramp[NMBNEU-1][0],i) - + colval(bramp[NMBNEU-2][0],i)) / + (colval(bramp[NMBNEU-1][1],i) - + colval(bramp[NMBNEU-2][1],i)); + } /* compute color mapping */ do { cflags = inpflags & ~gmtflags; @@ -410,15 +428,8 @@ compute() /* compute color mapping */ compsoln(clrin, clrout, n); /* check out-of-gamut colors */ for (i = 0; i < 24; i++) - if (cflags & 1L<= 1.-1e-6) { - gmtflags |= 1L<