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

Comparing ray/src/px/aedimage.c (file contents):
Revision 1.4 by greg, Fri Sep 15 09:10:24 1989 UTC vs.
Revision 2.2 by greg, Thu Dec 19 14:51:44 1991 UTC

# Line 97 | Line 97 | FILE  *fin;
97   extern long  ftell();
98   long  scanpos[NROWS];
99  
100 extern double  atof();
100   double  exposure = 1.0;
101 + int  wrong_fmt = 0;
102  
103  
104   main(argc, argv)
# Line 140 | Line 140 | char  *argv[];
140                  quitmsg(errmsg);
141          }
142                                  /* get header */
143 <        getheader(fin, checkhead);
143 >        getheader(fin, checkhead, NULL);
144 >        if (wrong_fmt)
145 >                quitmsg("input must be a Radiance picture");
146                                  /* get picture dimensions */
147 <        if (fgetresolu(&xmax, &ymax, fin) != (YMAJOR|YDECR))
147 >        if (fgetresolu(&xmax, &ymax, fin) < 0)
148                  quitmsg("bad picture size");
149          if (xmax > NCOLS || ymax > NROWS)
150                  quitmsg("resolution mismatch");
# Line 169 | Line 171 | userr:
171   checkhead(line)                         /* deal with line from header */
172   char  *line;
173   {
174 <        if (!strncmp(line, "EXPOSURE=", 9))
175 <                exposure *= atof(line+9);
174 >        char    fmt[32];
175 >
176 >        if (isexpos(line))
177 >                exposure *= exposval(line);
178 >        else if (isformat(line)) {
179 >                formatval(fmt, line);
180 >                wrong_fmt = strcmp(fmt, COLRFMT);
181 >        }
182   }
183  
184  
# Line 315 | Line 323 | loopcom()                              /* print pixel values interactively */
323                                  break;
324                          case 'l':
325                          case 'L':
326 <                                printf("%-3gL", bright(cval)*683.0/exposure);
326 >                                printf("%-3gL", luminance(cval)/exposure);
327                                  break;
328                          case 'c':
329                          case 'C':
# Line 396 | Line 404 | picreadline3(y, l3)                    /* read in 3-byte scanline */
404   int  y;
405   register rgbpixel  *l3;
406   {
407 <        register BYTE   *l4;
408 <        register int    shift, c;
401 <        int     i;
402 <
407 >        register int    i;
408 >                                                        /* read scanline */
409          getscan(y);
410                                                          /* convert scanline */
411 <        for (l4=scanline[0], i=xmax; i--; l4+=4, l3++) {
412 <                shift = l4[EXP] - COLXS;
413 <                if (shift >= 8) {
414 <                        l3->r = l3->g = l3->b = 255;
415 <                } else if (shift <= -8) {
410 <                        l3->r = l3->g = l3->b = 0;
411 <                } else if (shift > 0) {
412 <                        c = l4[RED] << shift;
413 <                        l3->r = c > 255 ? 255 : c;
414 <                        c = l4[GRN] << shift;
415 <                        l3->g = c > 255 ? 255 : c;
416 <                        c = l4[BLU] << shift;
417 <                        l3->b = c > 255 ? 255 : c;
418 <                } else if (shift < 0) {
419 <                        l3->r = l4[RED] >> -shift;
420 <                        l3->g = l4[GRN] >> -shift;
421 <                        l3->b = l4[BLU] >> -shift;
422 <                } else {
423 <                        l3->r = l4[RED];
424 <                        l3->g = l4[GRN];
425 <                        l3->b = l4[BLU];
426 <                }
411 >        normcolrs(scanline, xmax, 0);
412 >        for (i = 0; i < xmax; i++) {
413 >                l3[i].r = scanline[i][RED];
414 >                l3[i].g = scanline[i][GRN];
415 >                l3[i].b = scanline[i][BLU];
416          }
417   }
418  
# Line 534 | Line 523 | colormap  map;
523          register int  i, val;
524  
525          for (i = 0; i < 256; i++) {
526 <                val = pow(i/256.0, 1.0/GAMMA) * 256.0;
526 >                val = pow((i+0.5)/256.0, 1.0/GAMMA) * 256.0;
527                  map[0][i] = map[1][i] = map[2][i] = val;
528          }
529   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines