47 |
|
{ |
48 |
|
FILE *fin = NULL; |
49 |
|
TIFF *tin = NULL; |
50 |
< |
int i; |
50 |
> |
int i, rval; |
51 |
|
|
52 |
|
for (i = 1; i < argc && argv[i][0] == '-'; i++) |
53 |
|
switch (argv[i][1]) { |
106 |
|
exit(1); |
107 |
|
} |
108 |
|
if (fin != NULL) { |
109 |
< |
tmap_picture(argv[i], fin); |
109 |
> |
rval = tmap_picture(argv[i], fin); |
110 |
|
fclose(fin); |
111 |
|
} else { |
112 |
< |
tmap_tiff(argv[i], tin); |
112 |
> |
rval = tmap_tiff(argv[i], tin); |
113 |
|
TIFFClose(tin); |
114 |
|
} |
115 |
|
TIFFClose(tifout); |
116 |
< |
exit(0); |
116 |
> |
exit(rval==0 ? 0 : 1); |
117 |
|
userr: |
118 |
|
fprintf(stderr, |
119 |
|
"Usage: %s [-h][-s][-c][-l][-b][-g gv][-d ld][-u lm][-p xr yr xg yg xb yb xw yw] input.{tif|pic} output.tif\n", |
165 |
|
} |
166 |
|
|
167 |
|
|
168 |
+ |
int |
169 |
|
tmap_picture(fname, fp) /* tone map Radiance picture */ |
170 |
|
char *fname; |
171 |
|
FILE *fp; |
178 |
|
/* read and tone map picture */ |
179 |
|
if (tmMapPicture(&pix, &xsiz, &ysiz, flags, |
180 |
|
rgbp, gamv, lddyn, ldmax, fname, fp) != TM_E_OK) |
181 |
< |
exit(1); |
181 |
> |
return(-1); |
182 |
|
/* get relevant header info. */ |
183 |
|
rewind(fp); |
184 |
|
pixrat = 1.; |
191 |
|
break; |
192 |
|
orient++; |
193 |
|
/* put out our image */ |
194 |
< |
putimage(orient, (uint32)xsiz, (uint32)ysiz, 72., 72./pixrat, 2, pix); |
194 |
> |
if (putimage(orient, (uint32)xsiz, (uint32)ysiz, |
195 |
> |
72., 72./pixrat, 2, pix) != 0) |
196 |
> |
return(-1); |
197 |
|
/* free data and we're done */ |
198 |
|
free((char *)pix); |
199 |
+ |
return(0); |
200 |
|
} |
201 |
|
|
202 |
|
|
211 |
|
/* check to make sure it's SGILOG */ |
212 |
|
TIFFGetFieldDefaulted(tp, TIFFTAG_PHOTOMETRIC, &phot); |
213 |
|
if (phot != PHOTOMETRIC_LOGLUV && phot != PHOTOMETRIC_LOGL) { |
214 |
< |
fprintf(stderr, "%s: TIFF must be in SGILOG format\n", fname); |
215 |
< |
exit(1); |
214 |
> |
if (!(flags & TM_F_NOSTDERR)) { |
215 |
> |
fputs(fname, stderr); |
216 |
> |
fputs(": TIFF must be in SGILOG format\n", stderr); |
217 |
> |
} |
218 |
> |
return(-1); |
219 |
|
} |
220 |
|
if (phot == PHOTOMETRIC_LOGL) |
221 |
|
flags |= TM_F_BW; |
222 |
|
/* read and tone map TIFF */ |
223 |
|
if (tmMapTIFF(&pix, &xsiz, &ysiz, flags, |
224 |
|
rgbp, gamv, lddyn, ldmax, fname, tp) != TM_E_OK) |
225 |
< |
exit(1); |
225 |
> |
return(-1); |
226 |
|
/* get relevant tags */ |
227 |
|
TIFFGetFieldDefaulted(tp, TIFFTAG_RESOLUTIONUNIT, &resunit); |
228 |
|
TIFFGetFieldDefaulted(tp, TIFFTAG_XRESOLUTION, &xres); |
229 |
|
TIFFGetFieldDefaulted(tp, TIFFTAG_YRESOLUTION, &yres); |
230 |
|
TIFFGetFieldDefaulted(tp, TIFFTAG_ORIENTATION, &orient); |
231 |
|
/* put out our image */ |
232 |
< |
putimage(orient, (uint32)xsiz, (uint32)ysiz, xres, yres, resunit, pix); |
232 |
> |
if (putimage(orient, (uint32)xsiz, (uint32)ysiz, |
233 |
> |
xres, yres, resunit, pix) != 0) |
234 |
> |
return(-1); |
235 |
|
/* free data and we're done */ |
236 |
|
free((char *)pix); |
237 |
+ |
return(0); |
238 |
|
} |
239 |
|
|
240 |
|
|
284 |
|
if (TIFFWriteScanline(tifout, pd + y*3*xs, y, 0) < 0) |
285 |
|
goto writerr; |
286 |
|
} |
287 |
< |
return; /* all done! */ |
287 |
> |
return(0); /* all done! */ |
288 |
|
writerr: |
289 |
|
fputs("Error writing TIFF output\n", stderr); |
290 |
< |
exit(2); |
290 |
> |
return(-1); |
291 |
|
} |