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

Comparing ray/src/px/pvalue.c (file contents):
Revision 2.15 by greg, Tue Feb 25 16:22:05 2003 UTC vs.
Revision 2.17 by greg, Thu Feb 27 02:00:12 2003 UTC

# Line 1 | Line 1
1   #ifndef lint
2 < static const char       RCSid[] = "$Id$";
2 > static const char RCSid[] = "$Id$";
3   #endif
4   /*
5   *  pvalue.c - program to print pixel values.
# Line 23 | Line 23 | typedef        unsigned short uint16;  /* sizeof (uint16) must
23   #define  ALL            3
24   #define  BRIGHT         4
25  
26 #define  brightonly     (putprim==BRIGHT)
27
26   RESOLU  picres;                 /* resolution of picture */
27  
28   int  uniq = 0;                  /* print only unique values? */
# Line 44 | Line 42 | int  header = 1;               /* do header? */
42  
43   long  skipbytes = 0;            /* skip bytes in input? */
44  
45 + int  swapbytes = 0;             /* swap bytes in 16-bit words? */
46 +
47   int  interleave = 1;            /* file is interleaved? */
48  
49   int  resolution = 1;            /* put/get resolution string? */
# Line 169 | Line 169 | char  **argv;
169                                          format = 'b';
170                                          fmtid = "byte";
171                                          break;
172 +                                case 'W':               /* 16-bit swapped */
173 +                                        swapbytes = 1;
174                                  case 'w':               /* 16-bit */
175                                          dataonly = 1;
176                                          format = 'w';
# Line 215 | Line 217 | unkopt:
217                          break;
218                                          /* recognize special formats */
219          if (dataonly && format == 'b')
220 <                if (brightonly)
219 <                        fmtid = "8-bit_grey";
220 <                else
220 >                if (putprim == ALL)
221                          fmtid = "24-bit_rgb";
222        if (dataonly && format == 'w')
223                if (brightonly)
224                        fmtid = "16-bit_grey";
222                  else
223 +                        fmtid = "8-bit_grey";
224 +        if (dataonly && format == 'w')
225 +                if (putprim == ALL)
226                          fmtid = "48-bit_rgb";
227 +                else
228 +                        fmtid = "16-bit_grey";
229                                          /* assign reverse ordering */
230          rord[ord[0]] = 0;
231          rord[ord[1]] = 1;
# Line 237 | Line 239 | unkopt:
239                                                  progname, argv[i]);
240                          quit(1);
241                  }
242 <                if (reverse && !brightonly && i == argc-3) {
242 >                if (reverse && putprim != BRIGHT && i == argc-3) {
243                          if ((fin2 = fopen(argv[i+1], "r")) == NULL) {
244                                  fprintf(stderr, "%s: can't open file \"%s\"\n",
245                                                  progname, argv[i+1]);
# Line 251 | Line 253 | unkopt:
253                          interleave = -1;
254                  } else if (i != argc-1)
255                          fin = NULL;
256 <                if (reverse && !brightonly && !interleave) {
256 >                if (reverse && putprim != BRIGHT && !interleave) {
257                          fin2 = fopen(argv[i], "r");
258                          fin3 = fopen(argv[i], "r");
259                  }
# Line 509 | Line 511 | int  code;
511   }
512  
513  
514 + swap16(wp, n)           /* swap n 16-bit words */
515 + register uint16  *wp;
516 + int  n;
517 + {
518 +        while (n-- > 0) {
519 +                *wp = *wp << 8 | ((*wp >> 8) & 0xff);
520 +                wp++;
521 +        }
522 + }
523 +
524   getcascii(col)          /* get an ascii color value from stream(s) */
525   COLOR  col;
526   {
# Line 620 | Line 632 | COLOR  col;
632                          fread((char *)(vw+2), sizeof(uint16), 1, fin3) != 1)
633                          return(-1);
634          }
635 +        if (swapbytes)
636 +                swap16(vw, 3);
637          setcolor(col, (vw[rord[RED]]+.5)/65536.,
638                          (vw[rord[GRN]]+.5)/65536., (vw[rord[BLU]]+.5)/65536.);
639          return(0);
# Line 698 | Line 712 | COLOR  col;
712  
713          if (fread((char *)&vw, sizeof(uint16), 1, fin) != 1)
714                  return(-1);
715 +        if (swapbytes)
716 +                swap16(&vw, 1);
717          d = (vw+.5)/65536.;
718          setcolor(col, d, d, d);
719          return(0);
# Line 786 | Line 802 | COLOR  col;
802          vw[1] = min(i,65535);
803          i = colval(col,ord[2])*65536.;
804          vw[2] = min(i,65535);
805 +        if (swapbytes)
806 +                swap16(vw, 3);
807          fwrite((char *)vw, sizeof(uint16), 3, stdout);
808  
809          return(ferror(stdout) ? -1 : 0);
# Line 856 | Line 874 | COLOR  col;
874  
875          i = (*mybright)(col)*65536.;
876          vw = min(i,65535);
877 +        if (swapbytes)
878 +                swap16(&vw, 1);
879          fwrite((char *)&vw, sizeof(uint16), 1, stdout);
880  
881          return(ferror(stdout) ? -1 : 0);
# Line 926 | Line 946 | COLOR  col;
946  
947          i = colval(col,putprim)*65536.;
948          vw = min(i,65535);
949 +        if (swapbytes)
950 +                swap16(&vw, 1);
951          fwrite((char *)&vw, sizeof(uint16), 1, stdout);
952  
953          return(ferror(stdout) ? -1 : 0);

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines