732 |
|
default:; |
733 |
|
} |
734 |
|
fputc('\n', pdfp[0]); // flush picture header + resolution |
735 |
– |
fprtresolu(GetWidth(), GetHeight(), pdfp[0]); |
735 |
|
if (fflush(pdfp[0]) == EOF) { |
736 |
|
sprintf(errmsg, "cannot write header to picture '%s'", pfname); |
737 |
|
error(SYSTEM, errmsg); |
739 |
|
pdfp[0] = NULL; |
740 |
|
return RDTnone; |
741 |
|
} |
742 |
< |
if (dfname) { |
742 |
> |
if (dfname) { // open depth output |
743 |
|
if (dfname[0] == '!') |
744 |
|
pdfp[1] = popen(dfname+1, "w"); |
745 |
|
else |
760 |
|
fputs(DEPTHSTR, pdfp[1]); fputs(dunit, pdfp[1]); fputc('\n', pdfp[1]); |
761 |
|
fputformat(DEPTH16FMT, pdfp[1]); |
762 |
|
fputc('\n', pdfp[1]); // end-of-info |
764 |
– |
fprtresolu(GetWidth(), GetHeight(), pdfp[1]); |
763 |
|
if (fflush(pdfp[1]) == EOF) { |
764 |
|
sprintf(errmsg, "cannot write header to '%s'", dfname); |
765 |
|
error(SYSTEM, errmsg); |
786 |
|
dt = NewOutput(pdfp, pfname, dt, dfname); |
787 |
|
if (dt == RDTnone) |
788 |
|
return RDTnone; |
789 |
+ |
// add resolution string(s) |
790 |
+ |
fprtresolu(GetWidth(), GetHeight(), pdfp[0]); |
791 |
+ |
if (RDTdepthT(dt) == RDTdshort) |
792 |
+ |
fprtresolu(GetWidth(), GetHeight(), pdfp[1]); |
793 |
|
|
794 |
|
const int bheight = (psample > 1) ? int(2*psample+.99) : 4; |
795 |
|
const int vstep = bheight >> (psample > 1); |
1005 |
|
SET_FILE_BINARY(pdfp[1]); |
1006 |
|
int n, len = strlen(HDRSTR); |
1007 |
|
char buf[32]; // sniff for 16-bit header |
1008 |
< |
if (read(fileno(pdfp[1]), buf, len+1) < len+1) { |
1008 |
> |
if (getbinary(buf, 1, len+1, pdfp[1]) < len+1) { |
1009 |
|
sprintf(errmsg, "empty depth file '%s'", dfname); |
1010 |
|
error(SYSTEM, errmsg); |
1011 |
|
fclose(pdfp[0]); fclose(pdfp[1]); |
1015 |
|
for (n = 0; n < len; n++) |
1016 |
|
if (buf[n] != HDRSTR[n]) |
1017 |
|
break; // not a Radiance header |
1018 |
< |
lseek(fileno(pdfp[1]), 0, SEEK_SET); |
1018 |
> |
rewind(pdfp[1]); |
1019 |
|
if ((n < len) | !isprint(buf[len])) |
1020 |
|
return RDTnewDT(dt, RDTdfloat); |
1021 |
|
|
1132 |
|
error(WARNING, errmsg); |
1133 |
|
} |
1134 |
|
long toSkip = 0; |
1135 |
< |
switch (RDTdepthT(dt)) { // append depth file, too? |
1135 |
> |
switch (RDTdepthT(dt)) { // append depth file, too? |
1136 |
|
case RDTdfloat: |
1137 |
|
toSkip = sizeof(float)*GetWidth()*doneScans; |
1138 |
|
break; |
1147 |
|
toSkip = 2L*GetWidth()*doneScans; |
1148 |
|
break; |
1149 |
|
default:; |
1150 |
< |
} |
1151 |
< |
if (toSkip && fseek(pdfp[1], toSkip, SEEK_CUR) < 0) { |
1150 |
> |
} // fseek() needed for output |
1151 |
> |
if (pdfp[1] && fseek(pdfp[1], toSkip, SEEK_CUR) < 0) { |
1152 |
|
sprintf(errmsg, "cannot seek on depth file '%s'", dfname); |
1153 |
|
error(SYSTEM, errmsg); |
1154 |
|
fclose(pdfp[0]); fclose(pdfp[1]); |