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

Comparing ray/src/px/ra_tiff.c (file contents):
Revision 2.10 by gregl, Thu Jul 31 21:26:45 1997 UTC vs.
Revision 2.16 by gwlarson, Thu Oct 8 11:21:52 1998 UTC

# Line 38 | Line 38 | struct {
38          float   gamcor;         /* gamma correction value */
39          short   bradj;          /* Radiance exposure adjustment (stops) */
40          uint16  orient;         /* visual orientation (TIFF spec.) */
41 <        float   stonits;        /* input conversion to nits */
41 >        double  stonits;        /* input conversion to nits */
42          float   pixrat;         /* pixel aspect ratio */
43          FILE    *rfp;           /* Radiance stream pointer */
44          TIFF    *tif;           /* TIFF pointer */
# Line 241 | Line 241 | initfromtif()          /* initialize conversion from TIFF inpu
241                  if (cvts.pconf != PLANARCONFIG_CONTIG)
242                          quiterr("cannot handle separate Luv planes");
243                  TIFFSetField(cvts.tif, TIFFTAG_SGILOGDATAFMT,
244 <                                SGILOGDATAFMT_FLTXYZ);
244 >                                SGILOGDATAFMT_FLOAT);
245                  cvts.tf = Luv2Color;
246                  break;
247          case PHOTOMETRIC_LOGL:
248                  SET(C_GRY|C_RFLT|C_TFLT|C_GAMUT);
249                  cvts.pconf = PLANARCONFIG_CONTIG;
250                  TIFFSetField(cvts.tif, TIFFTAG_SGILOGDATAFMT,
251 <                                SGILOGDATAFMT_FLTY);
251 >                                SGILOGDATAFMT_FLOAT);
252                  cvts.tf = L2Color;
253                  break;
254 +        case PHOTOMETRIC_YCBCR:
255 +                if (cvts.comp == COMPRESSION_JPEG &&
256 +                                cvts.pconf == PLANARCONFIG_CONTIG) {
257 +                        TIFFSetField(cvts.tif, TIFFTAG_JPEGCOLORMODE,
258 +                                        JPEGCOLORMODE_RGB);
259 +                        cvts.phot = PHOTOMETRIC_RGB;
260 +                } else
261 +                        quiterr("unsupported photometric type");
262 +                /* fall through */
263          case PHOTOMETRIC_RGB:
264                  SET(C_GAMMA|C_GAMUT);
265                  setcolrgam(cvts.gamcor);
# Line 269 | Line 278 | initfromtif()          /* initialize conversion from TIFF inpu
278                  break;
279          case PHOTOMETRIC_MINISBLACK:
280                  SET(C_GRY|C_GAMMA|C_GAMUT);
281 +                setcolrgam(cvts.gamcor);
282                  cvts.pconf = PLANARCONFIG_CONTIG;
283                  if (!TIFFGetField(cvts.tif, TIFFTAG_SAMPLESPERPIXEL, &hi) ||
284                                  hi != 1)
# Line 407 | Line 417 | initfromrad()                  /* initialize input from a Radiance pi
417                                  cvts.comp != COMPRESSION_SGILOG24)
418                          quiterr("internal error 2 in initfromrad");
419                  TIFFSetField(cvts.tif, TIFFTAG_SGILOGDATAFMT,
420 <                                SGILOGDATAFMT_FLTXYZ);
420 >                                SGILOGDATAFMT_FLOAT);
421                  cvts.tf = Color2Luv;
422                  break;
423          case PHOTOMETRIC_LOGL:
# Line 415 | Line 425 | initfromrad()                  /* initialize input from a Radiance pi
425                  if (cvts.comp != COMPRESSION_SGILOG)    
426                          quiterr("internal error 3 in initfromrad");
427                  TIFFSetField(cvts.tif, TIFFTAG_SGILOGDATAFMT,
428 <                                SGILOGDATAFMT_FLTY);
428 >                                SGILOGDATAFMT_FLOAT);
429                  cvts.tf = Color2L;
430                  break;
431          case PHOTOMETRIC_RGB:
# Line 505 | Line 515 | uint32 y;
515                  quiterr("error reading TIFF input");
516          
517          for (x = cvts.xmax; x--; ) {
518 <                cvts.r.colors[x][RED] = cvts.t.fp[3*x];
519 <                cvts.r.colors[x][GRN] = cvts.t.fp[3*x + 1];
520 <                cvts.r.colors[x][BLU] = cvts.t.fp[3*x + 2];
518 >                colval(cvts.r.colors[x],CIEX) = cvts.t.fp[3*x];
519 >                colval(cvts.r.colors[x],CIEY) = cvts.t.fp[3*x + 1];
520 >                colval(cvts.r.colors[x],CIEZ) = cvts.t.fp[3*x + 2];
521                  if (CHK(C_CXFM))
522                          colortrans(cvts.r.colors[x], cvts.cmat,
523                                          cvts.r.colors[x]);
# Line 539 | Line 549 | uint32 y;
549                  quiterr("error reading TIFF input");
550          
551          for (x = cvts.xmax; x--; )
552 <                cvts.r.colors[x][RED] =
553 <                cvts.r.colors[x][GRN] =
554 <                cvts.r.colors[x][BLU] = cvts.t.fp[x] > 0. ? cvts.t.fp[x] : 0.;
552 >                colval(cvts.r.colors[x],RED) =
553 >                colval(cvts.r.colors[x],GRN) =
554 >                colval(cvts.r.colors[x],BLU) =
555 >                                cvts.t.fp[x] > 0. ? cvts.t.fp[x] : 0.;
556  
557          if (fwritescan(cvts.r.colors, cvts.xmax, cvts.rfp) < 0)
558                  quiterr("error writing Radiance picture");
# Line 570 | Line 581 | uint32 y;
581                  if (TIFFReadScanline(cvts.tif, cvts.t.p, y, 0) < 0)
582                          goto readerr;
583                  if (TIFFReadScanline(cvts.tif,
584 <                                (tidata_t)(cvts.t.bp + cvts.xmax), y, 1) < 0)
584 >                                (tdata_t)(cvts.t.bp + cvts.xmax), y, 1) < 0)
585                          goto readerr;
586                  if (TIFFReadScanline(cvts.tif,
587 <                                (tidata_t)(cvts.t.bp + 2*cvts.xmax), y, 2) < 0)
587 >                                (tdata_t)(cvts.t.bp + 2*cvts.xmax), y, 2) < 0)
588                          goto readerr;
589                  for (x = cvts.xmax; x--; ) {
590                          cvts.r.colrs[x][RED] = cvts.t.bp[x];
# Line 637 | Line 648 | uint32 y;
648          double  m = pow(2.,(double)cvts.bradj);
649          register int    x;
650  
651 <        if (CHK(C_RFLT|C_TFLT) != (C_RFLT|C_TFLT) | !CHK(C_GRY))
651 >        if (CHK(C_RFLT|C_TFLT|C_GRY) != (C_RFLT|C_TFLT|C_GRY))
652                  quiterr("internal error 1 in Color2L");
653  
654          if (freadscan(cvts.r.colors, cvts.xmax, cvts.rfp) < 0)
# Line 675 | Line 686 | uint32 y;
686          }
687  
688          for (x = cvts.xmax; x--; ) {
689 <                cvts.t.fp[3*x] = colval(cvts.r.colors[x],RED);
690 <                cvts.t.fp[3*x+1] = colval(cvts.r.colors[x],GRN);
691 <                cvts.t.fp[3*x+2] = colval(cvts.r.colors[x],BLU);
689 >                cvts.t.fp[3*x] = colval(cvts.r.colors[x],CIEX);
690 >                cvts.t.fp[3*x+1] = colval(cvts.r.colors[x],CIEY);
691 >                cvts.t.fp[3*x+2] = colval(cvts.r.colors[x],CIEZ);
692          }
693  
694          if (TIFFWriteScanline(cvts.tif, cvts.t.p, y, 0) < 0)

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines