36 |
|
int wrongformat = 0; /* wrong input format? */ |
37 |
|
double gamcor = 1.0; /* gamma correction */ |
38 |
|
|
39 |
+ |
RGBPRIMP outprims = stdprims; /* output primaries for reverse conversion */ |
40 |
+ |
RGBPRIMS myprims; |
41 |
+ |
|
42 |
|
int ord[3] = {RED, GRN, BLU}; /* RGB ordering */ |
43 |
|
int rord[4]; /* reverse ordering */ |
44 |
|
|
149 |
|
case 'b': /* brightness values */ |
150 |
|
putprim = argv[i][0] == '-' ? BRIGHT : ALL; |
151 |
|
break; |
152 |
< |
case 'p': /* put primary */ |
152 |
> |
case 'p': /* primary controls */ |
153 |
|
switch (argv[i][2]) { |
154 |
+ |
/* these two options affect -r conversion */ |
155 |
+ |
case '\0': |
156 |
+ |
myprims[RED][CIEX] = atof(argv[++i]); |
157 |
+ |
myprims[RED][CIEY] = atof(argv[++i]); |
158 |
+ |
myprims[GRN][CIEX] = atof(argv[++i]); |
159 |
+ |
myprims[GRN][CIEY] = atof(argv[++i]); |
160 |
+ |
myprims[BLU][CIEX] = atof(argv[++i]); |
161 |
+ |
myprims[BLU][CIEY] = atof(argv[++i]); |
162 |
+ |
myprims[WHT][CIEX] = atof(argv[++i]); |
163 |
+ |
myprims[WHT][CIEY] = atof(argv[++i]); |
164 |
+ |
outprims = myprims; |
165 |
+ |
break; |
166 |
+ |
case 'x': case 'X': outprims = NULL; break; |
167 |
+ |
/* the following options affect +r only */ |
168 |
|
case 'r': case 'R': putprim = RED; break; |
169 |
|
case 'g': case 'G': putprim = GRN; break; |
170 |
|
case 'b': case 'B': putprim = BLU; break; |
339 |
|
printargs(i, argv, stdout); |
340 |
|
if (expval < .99 || expval > 1.01) |
341 |
|
fputexpos(expval, stdout); |
342 |
< |
fputformat(COLRFMT, stdout); |
342 |
> |
if (outprims != NULL) { |
343 |
> |
if (outprims != stdprims) |
344 |
> |
fputprims(outprims, stdout); |
345 |
> |
fputformat(COLRFMT, stdout); |
346 |
> |
} else /* XYZ data */ |
347 |
> |
fputformat(CIEFMT, stdout); |
348 |
|
putchar('\n'); |
349 |
|
fputsresolu(&picres, stdout); /* always put resolution */ |
350 |
|
valtopix(); |
637 |
|
COLOR col |
638 |
|
) |
639 |
|
{ |
640 |
< |
BYTE vb[3]; |
640 |
> |
uby8 vb[3]; |
641 |
|
|
642 |
|
if (fin2 == NULL) { |
643 |
< |
if (fread((char *)vb, sizeof(BYTE), 3, fin) != 3) |
643 |
> |
if (fread((char *)vb, sizeof(uby8), 3, fin) != 3) |
644 |
|
return(-1); |
645 |
|
} else { |
646 |
< |
if (fread((char *)vb, sizeof(BYTE), 1, fin) != 1 || |
647 |
< |
fread((char *)(vb+1), sizeof(BYTE), 1, fin2) != 1 || |
648 |
< |
fread((char *)(vb+2), sizeof(BYTE), 1, fin3) != 1) |
646 |
> |
if (fread((char *)vb, sizeof(uby8), 1, fin) != 1 || |
647 |
> |
fread((char *)(vb+1), sizeof(uby8), 1, fin2) != 1 || |
648 |
> |
fread((char *)(vb+2), sizeof(uby8), 1, fin3) != 1) |
649 |
|
return(-1); |
650 |
|
} |
651 |
|
setcolor(col, (vb[rord[RED]]+.5)/256., |
745 |
|
COLOR col |
746 |
|
) |
747 |
|
{ |
748 |
< |
BYTE vb; |
748 |
> |
uby8 vb; |
749 |
|
double d; |
750 |
|
|
751 |
< |
if (fread((char *)&vb, sizeof(BYTE), 1, fin) != 1) |
751 |
> |
if (fread((char *)&vb, sizeof(uby8), 1, fin) != 1) |
752 |
|
return(-1); |
753 |
|
d = (vb+.5)/256.; |
754 |
|
setcolor(col, d, d, d); |
844 |
|
) |
845 |
|
{ |
846 |
|
long i; |
847 |
< |
BYTE vb[3]; |
847 |
> |
uby8 vb[3]; |
848 |
|
|
849 |
|
i = colval(col,ord[0])*256.; |
850 |
|
vb[0] = min(i,255); |
852 |
|
vb[1] = min(i,255); |
853 |
|
i = colval(col,ord[2])*256.; |
854 |
|
vb[2] = min(i,255); |
855 |
< |
fwrite((char *)vb, sizeof(BYTE), 3, stdout); |
855 |
> |
fwrite((char *)vb, sizeof(uby8), 3, stdout); |
856 |
|
|
857 |
|
return(ferror(stdout) ? -1 : 0); |
858 |
|
} |
940 |
|
) |
941 |
|
{ |
942 |
|
register int i; |
943 |
< |
BYTE vb; |
943 |
> |
uby8 vb; |
944 |
|
|
945 |
|
i = (*mybright)(col)*256.; |
946 |
|
vb = min(i,255); |
947 |
< |
fwrite((char *)&vb, sizeof(BYTE), 1, stdout); |
947 |
> |
fwrite((char *)&vb, sizeof(uby8), 1, stdout); |
948 |
|
|
949 |
|
return(ferror(stdout) ? -1 : 0); |
950 |
|
} |
1028 |
|
) |
1029 |
|
{ |
1030 |
|
long i; |
1031 |
< |
BYTE vb; |
1031 |
> |
uby8 vb; |
1032 |
|
|
1033 |
|
i = colval(col,putprim)*256.; |
1034 |
|
vb = min(i,255); |
1035 |
< |
fwrite((char *)&vb, sizeof(BYTE), 1, stdout); |
1035 |
> |
fwrite((char *)&vb, sizeof(uby8), 1, stdout); |
1036 |
|
|
1037 |
|
return(ferror(stdout) ? -1 : 0); |
1038 |
|
} |
1154 |
|
if (fin2 == NULL) |
1155 |
|
goto namerr; |
1156 |
|
if (fseek(fin2, |
1157 |
< |
(long)sizeof(BYTE)*picres.xr*picres.yr, 1)) |
1157 |
> |
(long)sizeof(uby8)*picres.xr*picres.yr, 1)) |
1158 |
|
goto seekerr; |
1159 |
|
if (fseek(fin3, |
1160 |
< |
(long)sizeof(BYTE)*2*picres.xr*picres.yr, 1)) |
1160 |
> |
(long)sizeof(uby8)*2*picres.xr*picres.yr, 1)) |
1161 |
|
goto seekerr; |
1162 |
|
} |
1163 |
|
} |