--- ray/src/px/ra_bn.c 1990/10/19 21:44:29 1.6 +++ ray/src/px/ra_bn.c 1992/10/02 16:24:56 2.4 @@ -1,4 +1,4 @@ -/* Copyright (c) 1986 Regents of the University of California */ +/* Copyright (c) 1992 Regents of the University of California */ #ifndef lint static char SCCSid[] = "$SunId$ LBL"; @@ -12,12 +12,22 @@ static char SCCSid[] = "$SunId$ LBL"; #include +#ifdef MSDOS +#include +#endif + +#include + #include "color.h" -extern double atof(), pow(); +#include "resolu.h" +extern char *malloc(); + double gamma = 2.0; /* gamma correction */ +int bradj = 0; /* brightness adjustment */ + char *progname; char errmsg[128]; @@ -33,7 +43,12 @@ char *argv[]; { int reverse = 0; int i; - +#ifdef MSDOS + extern int _fmode; + _fmode = O_BINARY; + setmode(fileno(stdin), O_BINARY); + setmode(fileno(stdout), O_BINARY); +#endif progname = argv[0]; for (i = 1; i < argc; i++) @@ -45,6 +60,11 @@ char *argv[]; case 'r': reverse = !reverse; break; + case 'e': + if (argv[i+1][0] != '+' && argv[i+1][0] != '-') + goto userr; + bradj = atoi(argv[++i]); + break; default: goto userr; } @@ -69,8 +89,9 @@ char *argv[]; } /* put header */ printargs(i, argv, rafp); + fputformat(COLRFMT, rafp); putc('\n', rafp); - fputresolu(YMAJOR|YDECR, xmax, ymax, rafp); + fprtresolu(xmax, ymax, rafp); /* convert file */ bn2ra(); } else { @@ -84,8 +105,8 @@ char *argv[]; quiterr(errmsg); } /* get header */ - getheader(rafp, NULL); - if (fgetresolu(&xmax, &ymax, rafp) != (YMAJOR|YDECR)) + if (checkheader(rafp, COLRFMT, NULL) < 0 || + fgetresolu(&xmax, &ymax, rafp) < 0) quiterr("bad RADIANCE format"); if (openbarney(argv[i+1], "w") < 0) { sprintf(errmsg, "cannot open output \"%s\"", argv[i+1]); @@ -96,9 +117,10 @@ char *argv[]; } quiterr(NULL); userr: - fprintf(stderr, "Usage: %s [-g gamma] {input|-} output\n", progname); - fprintf(stderr, " or: %s -r [-g gamma] input [output|-]\n", + fprintf(stderr, "Usage: %s [-g gamma][-e +/-stops] {input|-} output\n", progname); + fprintf(stderr, " or: %s -r [-g gamma][-e +/-stops] input [output|-]\n", + progname); exit(1); } @@ -176,6 +198,8 @@ ra2bn() /* convert radiance to barneyscan */ for (j = 0; j < ymax; j++) { if (freadcolrs(inl, xmax, rafp) < 0) quiterr("error reading RADIANCE file"); + if (bradj) + shiftcolrs(inl, xmax, bradj); colrs_gambs(inl, xmax); for (i = 0; i < xmax; i++) { putc(inl[i][RED], bnfp[0]); @@ -206,6 +230,8 @@ bn2ra() /* convert barneyscan to radiance */ if (feof(bnfp[0]) || feof(bnfp[1]) || feof(bnfp[2])) quiterr("error reading barney file"); gambs_colrs(outline, xmax); + if (bradj) + shiftcolrs(outline, xmax, bradj); if (fwritecolrs(outline, xmax, rafp) < 0) quiterr("error writing RADIANCE file"); }