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

Comparing ray/src/px/ra_xyze.c (file contents):
Revision 2.9 by schorsch, Sun Mar 28 20:33:14 2004 UTC vs.
Revision 2.12 by greg, Thu Aug 2 18:33:48 2018 UTC

# Line 14 | Line 14 | static const char      RCSid[] = "$Id$";
14   #include  "platform.h"
15   #include  "color.h"
16   #include  "resolu.h"
17 + #include  "rtio.h"
18  
19   int  rgbinp = -1;                       /* input is RGBE? */
20   int  rgbout = 0;                        /* output should be RGBE? */
# Line 21 | Line 22 | RGBPRIMS  inprims = STDPRIMS;          /* input primaries */
22   RGBPRIMS  outprims = STDPRIMS;          /* output primaries */
23   double  expcomp = 1.0;                  /* exposure compensation */
24   int  doflat = -1;                       /* produce flat file? */
25 + double  origexp = -1.0;                 /* original exposure */
26   char  *progname;
27  
28   static gethfunc headline;
# Line 35 | Line 37 | headline(                              /* process header line */
37          void    *p
38   )
39   {
40 <        char    fmt[32];
40 >        char    fmt[MAXFMTLEN];
41  
42          if (formatval(fmt, s)) {        /* check if format string */
43                  if (!strcmp(fmt,COLRFMT))
# Line 46 | Line 48 | headline(                              /* process header line */
48                          rgbinp = -2;
49                  return(0);              /* don't echo */
50          }
51 +        if (origexp > 0.0 && isexpos(s)) {
52 +                origexp *= exposval(s);
53 +                return(0);              /* don't echo */
54 +        }
55          if (isprims(s)) {               /* get input primaries */
56                  primsval(inprims, s);
57                  return(0);              /* don't echo */
# Line 88 | Line 94 | main(int  argc, char  *argv[])
94                                  outprims[WHT][CIEX] = atof(argv[++i]);
95                                  outprims[WHT][CIEY] = atof(argv[++i]);
96                                  break;
97 +                        case 'o':               /* original exposure */
98 +                                origexp = 1.0;
99 +                                break;
100                          case 'e':               /* exposure compensation */
101                                  expcomp = atof(argv[++i]);
102                                  if (argv[i][0] == '+' || argv[i][0] == '-')
# Line 122 | Line 131 | main(int  argc, char  *argv[])
131          convert();                              /* convert picture */
132          exit(0);
133   userr:
134 <        fprintf(stderr, "Usage: %s [-r][-e exp][-c|-u]", progname);
134 >        fprintf(stderr, "Usage: %s [-r][-o][-e exp][-c|-u]", progname);
135          fprintf(stderr, "[-p rx ry gx gy bx by wx wy] [input [output]]\n");
136          exit(1);
137   }
# Line 149 | Line 158 | convert(void)                          /* convert to XYZE or RGBE picture */
158          COLORMAT        xfm;
159          register COLOR  *scanin;
160          register COLR   *scanout;
161 <        double  ourexp = expcomp;
161 >        double  exp2do = expcomp;
162 >        double  exp2report = expcomp;
163          int     y;
164          register int    x;
165 +                                                /* recover original? */
166 +        if (origexp > 0.0)
167 +                exp2do /= origexp;
168                                                  /* compute transform */
169          if (rgbout) {
170                  if (rgbinp) {                   /* RGBE -> RGBE */
171                          comprgb2rgbWBmat(xfm, inprims, outprims);
172                  } else {                        /* XYZE -> RGBE */
173                          compxyz2rgbWBmat(xfm, outprims);
174 <                        ourexp *= WHTEFFICACY;
174 >                        if (origexp > 0.0)
175 >                                exp2do /= WHTEFFICACY;
176 >                        else
177 >                                exp2report *= WHTEFFICACY;
178                  }
179          } else {
180                  if (rgbinp) {                   /* RGBE -> XYZE */
181                          comprgb2xyzWBmat(xfm, inprims);
182 <                        ourexp /= WHTEFFICACY;
182 >                        if (origexp > 0.0)
183 >                                exp2do *= WHTEFFICACY;
184 >                        else
185 >                                exp2report /= WHTEFFICACY;
186                  } else {                        /* XYZE -> XYZE */
187                          for (y = 0; y < 3; y++)
188                                  for (x = 0; x < 3; x++)
# Line 172 | Line 191 | convert(void)                          /* convert to XYZE or RGBE picture */
191          }
192          for (y = 0; y < 3; y++)
193                  for (x = 0; x < 3; x++)
194 <                        xfm[y][x] *= expcomp;
194 >                        xfm[y][x] *= exp2do;
195                                                  /* get input resolution */
196          if ((order = fgetresolu(&xmax, &ymax, stdin)) < 0)
197                  quiterr("bad picture format");
198                                                  /* complete output header */
199 <        if (ourexp < 0.99 || ourexp > 1.01)
200 <                fputexpos(ourexp, stdout);
199 >        if ((exp2report < 0.99) | (exp2report > 1.01))
200 >                fputexpos(exp2report, stdout);
201          if (rgbout) {
202                  fputprims(outprims, stdout);
203                  fputformat(COLRFMT, stdout);
# Line 206 | Line 225 | convert(void)                          /* convert to XYZE or RGBE picture */
225                                  setcolr(scanout[x], colval(scanin[x],RED),
226                                                  colval(scanin[x],GRN),
227                                                  colval(scanin[x],BLU));
228 <                        fwrite((char *)scanout, sizeof(COLR), xmax, stdout);
228 >                        putbinary((char *)scanout, sizeof(COLR), xmax, stdout);
229                  } else
230                          fwritescan(scanin, xmax, stdout);
231                  if (ferror(stdout))

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines