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

Comparing ray/src/px/ra_t16.c (file contents):
Revision 1.2 by greg, Wed May 31 17:27:18 1989 UTC vs.
Revision 1.5 by greg, Fri Oct 20 16:42:28 1989 UTC

# Line 15 | Line 15 | static char SCCSid[] = "$SunId$ LBL";
15  
16   #include  "color.h"
17  
18 + #include  "random.h"
19 +
20   #include  "targa.h"
21  
22   #define  goodpic(h)     (((h)->dataType==IM_RGB || (h)->dataType==IM_CRGB) \
# Line 93 | Line 95 | char  *argv[];
95                                          /* put header */
96                  printargs(argc, argv, stdout);
97                  putchar('\n');
98 <                printf("-Y %d +X %d\n", head.y, head.x);
98 >                fputresolu(YMAJOR|YDECR, head.x, head.y, stdout);
99                                          /* convert file */
100                  tg2ra(&head);
101          } else {
102                  getheader(stdin, NULL);
103 <                if (scanf("-Y %d +X %d\n", &head.y, &head.x) != 2)
103 >                if (fgetresolu(&head.x, &head.y, stdin) != (YMAJOR|YDECR))
104                          quiterr("bad picture file");
105                                          /* assign header */
106                  head.textSize = 0;
# Line 276 | Line 278 | struct hdStruct  *hp;
278   ra2tg(hp)                       /* convert radiance to targa file */
279   struct hdStruct  *hp;
280   {
281 + #define  map(v)         (v >= 1.0 ? 1023 : (int)(v*1023.+.5))
282          unsigned char   gmap[1024];
283 <        register int    i, j, c;
283 >        register int    i, j;
284          unsigned char  *tarData;
285          COLOR   *inline;
286                                          /* set up gamma correction */
287 <        for (i = 0; i < 1024; i++)
288 <                gmap[i] = 256.*pow((i+.5)/1024., 1./gamma);
287 >        for (i = 0; i < 1024; i++) {
288 >                j = 256.*pow((i+.5)/1024., 1./gamma);
289 >                gmap[i] = hp->dataBits == 16 && j > 248 ? 248 : j;
290 >        }
291                                          /* allocate space for data */
292          inline = (COLOR *)emalloc(hp->x*sizeof(COLOR));
293          tarData = taralloc(hp);
# Line 294 | Line 299 | struct hdStruct  *hp;
299                          register unsigned short  *dp;
300                          dp = (unsigned short *)tarData + j*hp->x;
301                          for (i = 0; i < hp->x; i++) {
302 <                                c = 1024.*colval(inline[i],RED);
303 <                                if (c > 1023) c = 1023;
304 <                                *dp = (gmap[c] & 0xf8)<<7;
305 <                                c = 1024.*colval(inline[i],GRN);
306 <                                if (c > 1023) c = 1023;
307 <                                *dp |= (gmap[c] & 0xf8)<<2;
303 <                                c = 1024.*colval(inline[i],BLU);
304 <                                if (c > 1023) c = 1023;
305 <                                *dp++ |= gmap[c]>>3;
302 >                                *dp = ((gmap[map(colval(inline[i],RED))]
303 >                                                +(random()&7)) & 0xf8)<<7;
304 >                                *dp |= ((gmap[map(colval(inline[i],GRN))]
305 >                                                +(random()&7)) & 0xf8)<<2;
306 >                                *dp++ |= (gmap[map(colval(inline[i],BLU))]
307 >                                                +(random()&7))>>3;
308                          }
309                  } else {        /* hp->dataBits == 24 */
310                          register unsigned char  *dp;
311                          dp = (unsigned char *)tarData + j*3*hp->x;
312                          for (i = 0; i < hp->x; i++) {
313 <                                c = 1024.*colval(inline[i],BLU);
314 <                                if (c > 1023) c = 1023;
315 <                                *dp++ = gmap[c];
314 <                                c = 1024.*colval(inline[i],GRN);
315 <                                if (c > 1023) c = 1023;
316 <                                *dp++ = gmap[c];
317 <                                c = 1024.*colval(inline[i],RED);
318 <                                if (c > 1023) c = 1023;
319 <                                *dp++ = gmap[c];
313 >                                *dp++ = gmap[map(colval(inline[i],BLU))];
314 >                                *dp++ = gmap[map(colval(inline[i],GRN))];
315 >                                *dp++ = gmap[map(colval(inline[i],RED))];
316                          }
317                  }
318          }
# Line 325 | Line 321 | struct hdStruct  *hp;
321  
322          free((char *)inline);
323          free((char *)tarData);
324 + #undef  map
325   }
326  
327  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines