ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/px/pcond2.c
(Generate patch)

Comparing ray/src/px/pcond2.c (file contents):
Revision 3.4 by greg, Thu Jan 9 13:56:28 1997 UTC vs.
Revision 3.7 by greg, Fri Jan 31 15:56:20 1997 UTC

# Line 1 | Line 1
1 < /* Copyright (c) 1996 Regents of the University of California */
1 > /* Copyright (c) 1997 Regents of the University of California */
2  
3   #ifndef lint
4   static char SCCSid[] = "$SunId$ LBL";
# Line 21 | Line 21 | double inpexp = 1.0;                   /* input exposure value */
21   char    *mbcalfile = NULL;              /* macbethcal mapping file */
22  
23   static struct mbc {
24        float   xa[3][6], ya[3][6];
24          COLORMAT        cmat;
25 +        float   xa[3][6], ya[3][6];
26 +        COLOR   cmin, cmax;
27   }       mbcond;                         /* macbethcal conditioning struct */
28  
29   static COLOR    *scanbuf;               /* scanline processing buffer */
# Line 60 | Line 61 | COLOR *
61   nextscan()                              /* read and condition next scanline */
62   {
63          if (nread >= numscans(&inpres)) {
63 #ifdef DEBUG
64                fputs("done\n", stderr);
65 #endif
64                  free((char *)scanbuf);
65                  return(scanbuf = NULL);
66          }
# Line 100 | Line 98 | firstscan()                            /* return first processed scanline */
98                          comprgb2rgbmat(mbcond.cmat, inprims, outprims);
99                  else
100                          compxyz2rgbmat(mbcond.cmat, outprims);
101 <        if (what2do&DO_ACUITY) {
104 < #ifdef DEBUG
105 <                fprintf(stderr, "%s: initializing acuity sampling...",
106 <                                progname);
107 < #endif
101 >        if (what2do&DO_ACUITY)
102                  initacuity();
109 #ifdef DEBUG
110                fprintf(stderr, "done\n");
111 #endif
112        }
103          scanbuf = (COLOR *)malloc(scanlen(&inpres)*sizeof(COLOR));
104          if (scanbuf == NULL)
105                  syserror("malloc");
106          nread = 0;
117 #ifdef DEBUG
118        fprintf(stderr, "%s: processing image...", progname);
119 #endif
107          return(nextscan());
108   }
109  
# Line 140 | Line 127 | COLORMAT       mat;
127   {
128          while (len--) {
129                  colortrans(sl[0], mat, sl[0]);
130 +                clipgamut(sl[0], bright(sl[0]), CGAMUT, cblack, cwhite);
131                  sl++;
132          }
133   }
# Line 154 | Line 142 | register struct mbc    *mb;
142          register int    i, j;
143  
144          while (len--) {
145 +                colortrans(sl[0], mb->cmat, sl[0]);
146 +                clipgamut(sl[0], bright(sl[0]), CGAMUT, mb->cmin, mb->cmax);
147                  for (i = 0; i < 3; i++) {
148                          d = colval(sl[0],i);
149                          for (j = 0; j < 4 && mb->xa[i][j+1] <= d; j++)
# Line 162 | Line 152 | register struct mbc    *mb;
152                                          (d - mb->xa[i][j])*mb->ya[i][j+1] ) /
153                                          (mb->xa[i][j+1] - mb->xa[i][j]);
154                  }
165                colortrans(sl[0], mb->cmat, sl[0]);
155                  sl++;
156          }
157   }
# Line 176 | Line 165 | register struct mbc    *mb;
165          char    buf[128];
166          FILE    *fp;
167          int     inpflags = 0;
168 +        register int    i;
169  
170          if ((fp = fopen(fn, "r")) == NULL)
171                  syserror(fn);
# Line 230 | Line 220 | register struct mbc    *mb;
220                          inpflags |= 040;
221                  else if (!(inpflags & 0100) &&
222                                  sscanf(buf,
223 <                                "ro = %f*rn + %f*gn + %f*bn",
223 >                                "r = %f*r1 + %f*g1 + %f*b1",
224                                  &mb->cmat[0][0], &mb->cmat[0][1],
225                                  &mb->cmat[0][2]) == 3)
226                          inpflags |= 0100;
227                  else if (!(inpflags & 0200) &&
228                                  sscanf(buf,
229 <                                "go = %f*rn + %f*gn + %f*bn",
229 >                                "g = %f*r1 + %f*g1 + %f*b1",
230                                  &mb->cmat[1][0], &mb->cmat[1][1],
231                                  &mb->cmat[1][2]) == 3)
232                          inpflags |= 0200;
233                  else if (!(inpflags & 0400) &&
234                                  sscanf(buf,
235 <                                "bo = %f*rn + %f*gn + %f*bn",
235 >                                "b = %f*r1 + %f*g1 + %f*b1",
236                                  &mb->cmat[2][0], &mb->cmat[2][1],
237                                  &mb->cmat[2][2]) == 3)
238                          inpflags |= 0400;
# Line 254 | Line 244 | register struct mbc    *mb;
244                  exit(1);
245          }
246          fclose(fp);
247 +                                        /* compute gamut */
248 +        for (i = 0; i < 3; i++) {
249 +                colval(mb->cmin,i) = mb->xa[i][0] -
250 +                                mb->ya[i][0] *
251 +                                (mb->xa[i][1]-mb->xa[i][0]) /
252 +                                (mb->ya[i][1]-mb->ya[i][0]);
253 +                colval(mb->cmax,i) = mb->xa[i][4] +
254 +                                (1.-mb->ya[i][4]) *
255 +                                (mb->xa[i][5] - mb->xa[i][4]) /
256 +                                (mb->ya[i][5] - mb->ya[i][4]);
257 +        }
258   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines