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.6 by schorsch, Fri Jan 2 12:47:01 2004 UTC

# Line 1 | Line 1
1 /* Copyright (c) 1986 Regents of the University of California */
2
1   #ifndef lint
2 < static char SCCSid[] = "$SunId$ LBL";
2 > static const char       RCSid[] = "$Id$";
3   #endif
6
4   /*
5   *  aedimage.c - RADIANCE driver for AED 512 terminal.
6   *
# Line 12 | Line 9 | static char SCCSid[] = "$SunId$ LBL";
9   */
10  
11   #include  <stdio.h>
12 <
12 > #include  <math.h>
13   #include  <signal.h>
17
14   #include  <sys/ioctl.h>
15  
16   #include  "pic.h"
17 <
17 > #include  "resolu.h"
18   #include  "color.h"
19  
20  
# Line 97 | Line 93 | FILE  *fin;
93   extern long  ftell();
94   long  scanpos[NROWS];
95  
100 extern double  atof();
96   double  exposure = 1.0;
97 + int  wrong_fmt = 0;
98  
99 + static gethfunc checkhead;
100  
101 +
102   main(argc, argv)
103   int  argc;
104   char  *argv[];
105   {
106 <        int  onintr(), checkhead();
106 >        int  onintr();
107          char  sbuf[256];
108          register int  i;
109          
# Line 140 | Line 138 | char  *argv[];
138                  quitmsg(errmsg);
139          }
140                                  /* get header */
141 <        getheader(fin, checkhead);
141 >        getheader(fin, checkhead, NULL);
142 >        if (wrong_fmt)
143 >                quitmsg("input must be a Radiance picture");
144                                  /* get picture dimensions */
145 <        if (fgetresolu(&xmax, &ymax, fin) != (YMAJOR|YDECR))
145 >        if (fgetresolu(&xmax, &ymax, fin) < 0)
146                  quitmsg("bad picture size");
147          if (xmax > NCOLS || ymax > NROWS)
148                  quitmsg("resolution mismatch");
# Line 166 | Line 166 | userr:
166   }
167  
168  
169 < checkhead(line)                         /* deal with line from header */
170 < char  *line;
169 > static int
170 > checkhead(                              /* deal with line from header */
171 >        char  *line,
172 >        void    *p
173 > )
174   {
175 <        if (!strncmp(line, "EXPOSURE=", 9))
176 <                exposure *= atof(line+9);
175 >        char    fmt[32];
176 >
177 >        if (isexpos(line))
178 >                exposure *= exposval(line);
179 >        else if (isformat(line)) {
180 >                formatval(fmt, line);
181 >                wrong_fmt = strcmp(fmt, COLRFMT);
182 >        }
183 >        return(0);
184   }
185  
186  
# Line 235 | Line 245 | char  *err;
245   }
246  
247  
248 + void
249   eputs(s)
250   char  *s;
251   {
# Line 242 | Line 253 | char  *s;
253   }
254  
255  
256 + void
257   quit(status)
258   int  status;
259   {
# Line 315 | Line 327 | loopcom()                              /* print pixel values interactively */
327                                  break;
328                          case 'l':
329                          case 'L':
330 <                                printf("%-3gL", bright(cval)*683.0/exposure);
330 >                                printf("%-3gL", luminance(cval)/exposure);
331                                  break;
332                          case 'c':
333                          case 'C':
# Line 396 | Line 408 | picreadline3(y, l3)                    /* read in 3-byte scanline */
408   int  y;
409   register rgbpixel  *l3;
410   {
411 <        register BYTE   *l4;
412 <        register int    shift, c;
401 <        int     i;
402 <
411 >        register int    i;
412 >                                                        /* read scanline */
413          getscan(y);
414                                                          /* convert scanline */
415 <        for (l4=scanline[0], i=xmax; i--; l4+=4, l3++) {
416 <                shift = l4[EXP] - COLXS;
417 <                if (shift >= 8) {
418 <                        l3->r = l3->g = l3->b = 255;
419 <                } 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 <                }
415 >        normcolrs(scanline, xmax, 0);
416 >        for (i = 0; i < xmax; i++) {
417 >                l3[i].r = scanline[i][RED];
418 >                l3[i].g = scanline[i][GRN];
419 >                l3[i].b = scanline[i][BLU];
420          }
421   }
422  
# Line 530 | Line 523 | int  offset[3];
523   picreadcm(map)                  /* do gamma correction */
524   colormap  map;
525   {
533        extern double  pow();
526          register int  i, val;
527  
528          for (i = 0; i < 256; i++) {
529 <                val = pow(i/256.0, 1.0/GAMMA) * 256.0;
529 >                val = pow((i+0.5)/256.0, 1.0/GAMMA) * 256.0;
530                  map[0][i] = map[1][i] = map[2][i] = val;
531          }
532   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines