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

Comparing ray/src/px/ximage.c (file contents):
Revision 1.21 by greg, Mon Jan 8 14:47:11 1990 UTC vs.
Revision 2.4 by greg, Tue Apr 28 09:40:36 1992 UTC

# Line 23 | Line 23 | static char SCCSid[] = "$SunId$ LBL";
23  
24   #include  "color.h"
25  
26 + #include  "resolu.h"
27 +
28   #include  "xraster.h"
29  
30   #include  "view.h"
# Line 35 | Line 37 | static char SCCSid[] = "$SunId$ LBL";
37  
38   #define  FONTNAME       "9x15"          /* text font we'll use */
39  
40 < #define  CTRL(c)        ('c'-'@')
40 > #define  CTRL(c)        ((c)-'@')
41  
42   #define  BORWIDTH       5               /* border width */
43   #define  BARHEIGHT      25              /* menu bar size */
# Line 72 | Line 74 | int  cury = 0;                         /* current scan location */
74  
75   double  exposure = 1.0;                 /* exposure compensation used */
76  
77 + int  wrongformat = 0;                   /* input in another format */
78 +
79   struct {
80          int  xmin, ymin, xsiz, ysiz;
81   }  box = {0, 0, 0, 0};                  /* current box */
# Line 86 | Line 90 | extern long  ftell();
90  
91   extern char  *malloc(), *calloc();
92  
93 < extern double  atof(), pow(), log();
93 > extern double  pow(), log();
94  
95  
96   main(argc, argv)
# Line 141 | Line 145 | char  *argv[];
145                  }
146          }
147                                  /* get header */
148 <        getheader(fin, headline);
148 >        getheader(fin, headline, NULL);
149                                  /* get picture dimensions */
150 <        if (fgetresolu(&xmax, &ymax, fin) != (YMAJOR|YDECR))
150 >        if (wrongformat || fgetresolu(&xmax, &ymax, fin) != (YMAJOR|YDECR))
151                  quiterr("bad picture size");
152                                  /* set view parameters */
153          if (gotview && setview(&ourview) != NULL)
# Line 166 | Line 170 | userr:
170   headline(s)             /* get relevant info from header */
171   char  *s;
172   {
173 <        static char  *altname[] = {"rview","rpict",VIEWSTR,NULL};
170 <        register char  **an;
173 >        char  fmt[32];
174  
175          if (isexpos(s))
176                  exposure *= exposval(s);
177 <        else
178 <                for (an = altname; *an != NULL; an++)
179 <                        if (!strncmp(*an, s, strlen(*an))) {
180 <                                if (sscanview(&ourview, s+strlen(*an)) > 0)
181 <                                        gotview++;
179 <                                return;
180 <                        }
177 >        else if (isformat(s)) {
178 >                formatval(fmt, s);
179 >                wrongformat = strcmp(fmt, COLRFMT);
180 >        } else if (isview(s) && sscanview(&ourview, s) > 0)
181 >                gotview++;
182   }
183  
184  
# Line 287 | Line 288 | getras()                               /* get raster file */
288          }
289          return;
290   memerr:
291 <        quit("out of memory");
291 >        quiterr("out of memory");
292   }
293  
294  
# Line 359 | Line 360 | XKeyEvent  *ekey;
360                  return(0);
361          switch (*cp) {                  /* interpret command */
362          case 'q':
363 <        case CTRL(D):                           /* quit */
363 >        case CTRL('D'):                         /* quit */
364                  quit(0);
365          case '\n':
366          case '\r':
# Line 373 | Line 374 | XKeyEvent  *ekey;
374                          sprintf(buf, "%.3f", intens(cval)/exposure);
375                          break;
376                  case 'l':                               /* luminance */
377 <                        sprintf(buf, "%.0fn", bright(cval)*683.0/exposure);
377 >                        sprintf(buf, "%.0fL", luminance(cval)/exposure);
378                          break;
379                  case 'c':                               /* color */
380                          comp = pow(2.0, (double)scale);
# Line 407 | Line 408 | XKeyEvent  *ekey;
408                          XFeep(0);
409                          return(-1);
410                  }
411 <                viewray(rorg, rdir, &ourview, (ekey->x-xoff+.5)/xmax,
412 <                                (ymax-1-ekey->y+yoff+.5)/ymax);
411 >                if (viewray(rorg, rdir, &ourview, (ekey->x-xoff+.5)/xmax,
412 >                                (ymax-1-ekey->y+yoff+.5)/ymax) < 0)
413 >                        return(-1);
414                  printf("%e %e %e ", rorg[0], rorg[1], rorg[2]);
415                  printf("%e %e %e\n", rdir[0], rdir[1], rdir[2]);
416                  fflush(stdout);
# Line 428 | Line 430 | XKeyEvent  *ekey;
430                  free_raster(ourras);
431                  getras();
432          /* fall through */
433 <        case CTRL(R):                           /* redraw */
434 <        case CTRL(L):
433 >        case CTRL('R'):                         /* redraw */
434 >        case CTRL('L'):
435                  unmap_rcolors(ourras);
436                  XClear(wind);
437                  return(redraw(0, 0, width, height));
# Line 541 | Line 543 | getmono()                      /* get monochrome data */
543   {
544          register unsigned short *dp;
545          register int    x, err;
546 <        int     y;
547 <        rgbpixel        *inline;
546 >        int     y, errp;
547 >        rgbpixel        *inl;
548          short   *cerr;
549  
550 <        if ((inline = (rgbpixel *)malloc(xmax*sizeof(rgbpixel))) == NULL
550 >        if ((inl = (rgbpixel *)malloc(xmax*sizeof(rgbpixel))) == NULL
551                          || (cerr = (short *)calloc(xmax,sizeof(short))) == NULL)
552 <                quit("out of memory in getmono");
552 >                quiterr("out of memory in getmono");
553          dp = ourras->data.m - 1;
554          for (y = 0; y < ymax; y++) {
555 <                picreadline3(y, inline);
555 >                picreadline3(y, inl);
556                  err = 0;
557                  for (x = 0; x < xmax; x++) {
558                          if (!(x&0xf))
559                                  *++dp = 0;
560 <                        err += rgb_bright(&inline[x]) + cerr[x];
560 >                        errp = err;
561 >                        err += rgb_bright(&inl[x]) + cerr[x];
562                          if (err > 127)
563                                  err -= 255;
564                          else
565                                  *dp |= 1<<(x&0xf);
566 <                        cerr[x] = err >>= 1;
566 >                        err /= 3;
567 >                        cerr[x] = err + errp;
568                  }
569          }
570 <        free((char *)inline);
570 >        free((char *)inl);
571          free((char *)cerr);
572   }
573  
# Line 634 | Line 638 | int  y;
638                  if (scanpos == NULL || scanpos[y] == -1)
639                          return(-1);
640                  if (fseek(fin, scanpos[y], 0) == -1)
641 <                        quit("fseek error");
641 >                        quiterr("fseek error");
642                  cury = y;
643          } else if (scanpos != NULL)
644                  scanpos[y] = ftell(fin);
# Line 656 | Line 660 | register rgbpixel  *l3;
660          if (getscan(y) < 0)
661                  quiterr("cannot seek for picreadline");
662                                                          /* convert scanline */
663 <        if (scale)
660 <                for (i = 0; i < xmax; i++)
661 <                        if (scanline[i][EXP])
662 <                                scanline[i][EXP] += scale;
663 <        normcolrs(scanline, xmax);
663 >        normcolrs(scanline, xmax, scale);
664          for (i = 0; i < xmax; i++) {
665                  l3[i].r = scanline[i][RED];
666                  l3[i].g = scanline[i][GRN];
# Line 673 | Line 673 | picwriteline(y, l)             /* add 8-bit scanline to image */
673   int  y;
674   pixel  *l;
675   {
676 <        bcopy(l, ourras->data.bz+BZPixmapSize(xmax,y), BZPixmapSize(xmax,1));
676 >        bcopy((char *)l, (char *)ourras->data.bz+BZPixmapSize(xmax,y), BZPixmapSize(xmax,1));
677   }
678  
679  
# Line 684 | Line 684 | colormap  map;
684          register int  i, val;
685  
686          for (i = 0; i < 256; i++) {
687 <                val = pow(i/256.0, 1.0/gamcor) * 256.0;
687 >                val = pow((i+0.5)/256.0, 1.0/gamcor) * 256.0;
688                  map[0][i] = map[1][i] = map[2][i] = val;
689          }
690   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines