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.10 by greg, Wed Sep 13 15:41:52 1989 UTC vs.
Revision 1.20 by greg, Fri Jan 5 17:52:57 1990 UTC

# Line 29 | Line 29 | static char SCCSid[] = "$SunId$ LBL";
29  
30   #include  "pic.h"
31  
32 + #include  "random.h"
33 +
34   #define  controlshift(e)        (((XButtonEvent *)(e))->detail & (ShiftMask|ControlMask))
35  
36   #define  FONTNAME       "9x15"          /* text font we'll use */
# Line 38 | Line 40 | static char SCCSid[] = "$SunId$ LBL";
40   #define  BORWIDTH       5               /* border width */
41   #define  BARHEIGHT      25              /* menu bar size */
42  
43 < double  gamcor = 2.0;                   /* gamma correction */
43 > double  gamcor = 2.2;                   /* gamma correction */
44  
45   XRASTER  *ourras = NULL;                /* our stored raster image */
46  
# Line 144 | Line 146 | char  *argv[];
146          if (fgetresolu(&xmax, &ymax, fin) != (YMAJOR|YDECR))
147                  quiterr("bad picture size");
148                                  /* set view parameters */
149 <        if (gotview)
149 >        if (gotview) {
150 >                ourview.hresolu = xmax;
151 >                ourview.vresolu = ymax;
152                  if (setview(&ourview) != NULL)
153                          gotview = 0;
154 <
154 >        }
155          if ((scanline = (COLR *)malloc(xmax*sizeof(COLR))) == NULL)
156                  quiterr("out of memory");
157  
# Line 169 | Line 173 | char  *s;
173          static char  *altname[] = {"rview","rpict",VIEWSTR,NULL};
174          register char  **an;
175  
176 <        if (!strncmp(s, "EXPOSURE=", 9))
177 <                exposure *= atof(s+9);
176 >        if (isexpos(s))
177 >                exposure *= exposval(s);
178          else
179                  for (an = altname; *an != NULL; an++)
180                          if (!strncmp(*an, s, strlen(*an))) {
# Line 181 | Line 185 | char  *s;
185   }
186  
187  
184 char *
185 sskip(s)                /* skip a word */
186 register char  *s;
187 {
188        while (isspace(*s)) s++;
189        while (*s && !isspace(*s)) s++;
190        return(s);
191 }
192
193
188   init()                  /* get data and open window */
189   {
190          register int  i;
# Line 358 | Line 352 | XKeyEvent  *ekey;
352   {
353          char  buf[80];
354          COLOR  cval;
355 +        Color  cvx;
356          char  *cp;
357          int  n;
358          double  comp;
# Line 368 | Line 363 | XKeyEvent  *ekey;
363                  return(0);
364          switch (*cp) {                  /* interpret command */
365          case 'q':
366 <        case CTRL(D):                           /* quiterr */
366 >        case CTRL(D):                           /* quit */
367                  quit(0);
368          case '\n':
369          case '\r':
# Line 379 | Line 374 | XKeyEvent  *ekey;
374                  switch (*cp) {
375                  case '\n':
376                  case '\r':                              /* radiance */
377 <                        sprintf(buf, "%-3g", intens(cval)/exposure);
377 >                        sprintf(buf, "%.3f", intens(cval)/exposure);
378                          break;
379                  case 'l':                               /* luminance */
380 <                        sprintf(buf, "%-3gL", bright(cval)*683.0/exposure);
380 >                        sprintf(buf, "%.0fn", bright(cval)*683.0/exposure);
381                          break;
382                  case 'c':                               /* color */
383                          comp = pow(2.0, (double)scale);
# Line 395 | Line 390 | XKeyEvent  *ekey;
390                  XText(wind, box.xmin, box.ymin, buf, strlen(buf),
391                                  fontid, BlackPixel, WhitePixel);
392                  return(0);
393 +        case 'i':                               /* identify (contour) */
394 +                if (ourras->pixels == NULL)
395 +                        return(-1);
396 +                n = ourras->data.bz[ekey->x-xoff+BZPixmapSize(xmax,ekey->y-yoff)];
397 +                n = ourras->pmap[n];
398 +                cvx.pixel = ourras->cdefs[n].pixel;
399 +                cvx.red = random() & 65535;
400 +                cvx.green = random() & 65535;
401 +                cvx.blue = random() & 65535;
402 +                XStoreColor(&cvx);
403 +                return(0);
404          case 'p':                               /* position */
405                  sprintf(buf, "(%d,%d)", ekey->x-xoff, ymax-1-ekey->y+yoff);
406                  XText(wind, ekey->x, ekey->y, buf, strlen(buf),
# Line 428 | Line 434 | XKeyEvent  *ekey;
434          /* fall through */
435          case CTRL(R):                           /* redraw */
436          case CTRL(L):
437 +                unmap_rcolors(ourras);
438                  XClear(wind);
439                  return(redraw(0, 0, width, height));
440          case ' ':                               /* clear */
# Line 601 | Line 608 | register XRASTER       *xr;
608   double  sf;
609   {
610          register int    i;
611 <        int     maxv;
611 >        long    maxv;
612  
613 +        if (xr->pixels == NULL)
614 +                return;
615 +
616          sf = pow(sf, 1.0/gamcor);
617 <        maxv = (1<<16) / sf;
617 >        maxv = 65535/sf;
618  
619          for (i = xr->ncolors; i--; ) {
620 <                xr->cdefs[i].red = xr->cdefs[i].red >= maxv ?
621 <                                (1<<16)-1 :
620 >                xr->cdefs[i].red = xr->cdefs[i].red > maxv ?
621 >                                65535 :
622                                  xr->cdefs[i].red * sf;
623 <                xr->cdefs[i].green = xr->cdefs[i].green >= maxv ?
624 <                                (1<<16)-1 :
623 >                xr->cdefs[i].green = xr->cdefs[i].green > maxv ?
624 >                                65535 :
625                                  xr->cdefs[i].green * sf;
626 <                xr->cdefs[i].blue = xr->cdefs[i].blue >= maxv ?
627 <                                (1<<16)-1 :
626 >                xr->cdefs[i].blue = xr->cdefs[i].blue > maxv ?
627 >                                65535 :
628                                  xr->cdefs[i].blue * sf;
629          }
630 <        if (xr->pixels != NULL)
621 <                XStoreColors(xr->ncolors, xr->cdefs);
630 >        XStoreColors(xr->ncolors, xr->cdefs);
631   }
632  
633  
# Line 646 | Line 655 | picreadline3(y, l3)                    /* read in 3-byte scanline */
655   int  y;
656   register rgbpixel  *l3;
657   {
658 <        register BYTE   *l4;
659 <        register int    shift, c;
651 <        int     i;
652 <
658 >        register int    i;
659 >                                                        /* read scanline */
660          if (getscan(y) < 0)
661                  quiterr("cannot seek for picreadline");
662                                                          /* convert scanline */
663 <        for (l4=scanline[0], i=xmax; i--; l4+=4, l3++) {
664 <                shift = l4[EXP] - COLXS + scale;
665 <                if (shift >= 8) {
666 <                        l3->r = l3->g = l3->b = 255;
667 <                } else if (shift <= -8) {
668 <                        l3->r = l3->g = l3->b = 0;
669 <                } else if (shift > 0) {
670 <                        c = l4[RED] << shift;
671 <                        l3->r = c > 255 ? 255 : c;
665 <                        c = l4[GRN] << shift;
666 <                        l3->g = c > 255 ? 255 : c;
667 <                        c = l4[BLU] << shift;
668 <                        l3->b = c > 255 ? 255 : c;
669 <                } else if (shift < 0) {
670 <                        l3->r = l4[RED] >> -shift;
671 <                        l3->g = l4[GRN] >> -shift;
672 <                        l3->b = l4[BLU] >> -shift;
673 <                } else {
674 <                        l3->r = l4[RED];
675 <                        l3->g = l4[GRN];
676 <                        l3->b = l4[BLU];
677 <                }
663 >        if (scale)
664 >                for (i = 0; i < xmax; i++)
665 >                        if (scanline[i][EXP])
666 >                                scanline[i][EXP] += scale;
667 >        normcolrs(scanline, xmax);
668 >        for (i = 0; i < xmax; i++) {
669 >                l3[i].r = scanline[i][RED];
670 >                l3[i].g = scanline[i][GRN];
671 >                l3[i].b = scanline[i][BLU];
672          }
673   }
674  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines