68 |
|
double uvp[2]; |
69 |
|
{ /* Should check that tm->inppri==TM_XYZPRIM beforehand... */ |
70 |
|
double d, x, y; |
71 |
< |
COLR XYZ, RGB; |
71 |
> |
COLOR XYZ, RGB; |
72 |
|
/* convert to XYZ */ |
73 |
|
d = 1./(6.*uvp[0] - 16.*uvp[1] + 12.); |
74 |
|
x = 9.*uvp[0] * d; |
94 |
|
TMbright li; /* encoded world luminance */ |
95 |
|
double uvp[2]; /* world (u',v') -> returned desaturated */ |
96 |
|
{ |
97 |
< |
/* UNIMPLEMENTED */ |
98 |
< |
return(li); |
97 |
> |
double scotrat, d; |
98 |
> |
|
99 |
> |
if (li >= BMESUPPER) |
100 |
> |
return(li); |
101 |
> |
scotrat = 1.33/9.*(6.*uvp[0]-16.*uvp[1]+12.)/uvp[0] - 1.68; |
102 |
> |
if (li <= BMESLOWER) { |
103 |
> |
d = 0.; |
104 |
> |
uvp[0] = U_NEU; uvp[1] = V_NEU; |
105 |
> |
} else { |
106 |
> |
d = (tmLuminance(li) - LMESLOWER)/(LMESUPPER - LMESLOWER); |
107 |
> |
uvp[0] = d*uvp[0] + (1.-d)*U_NEU; |
108 |
> |
uvp[1] = d*uvp[1] + (1.-d)*V_NEU; |
109 |
> |
} |
110 |
> |
d = li + (double)TM_BRTSCALE*log(d + (1.-d)*scotrat/2.26); |
111 |
> |
return((TMbright)(d+.5)); |
112 |
|
} |
113 |
|
|
114 |
|
|
198 |
|
uvp[0] = 1./UVSCALE*((luvs[i]>>8 & 0xff) + .5); |
199 |
|
uvp[1] = 1./UVSCALE*((luvs[i] & 0xff) + .5); |
200 |
|
ls[i] = compmeshift(ls[i], uvp); |
201 |
< |
j = tmTop->flags & TM_F_BW || ls[i] < BMESLOWER |
201 |
> |
j = tmTop->flags&TM_F_BW || ls[i]<BMESLOWER |
202 |
|
? UVNEU |
203 |
|
: (int)(uvp[0]*UVSCALE)<<8 |
204 |
|
| (int)(uvp[1]*UVSCALE); |
254 |
|
uvp[1] = V_NEU; |
255 |
|
} |
256 |
|
ls[i] = compmeshift(ls[i], uvp); |
257 |
< |
if (tmTop->flags & TM_F_BW || ls[i] < BMESLOWER |
257 |
> |
if (tmTop->flags&TM_F_BW || ls[i]<BMESLOWER |
258 |
|
|| (j = uvpencode(uvp)) < 0) |
259 |
|
j = uv14neu; |
260 |
|
} else { |
262 |
|
} |
263 |
|
if (!isuvset(ld, j)) { |
264 |
|
if (uvpdecode(uvp, j) < 0) { |
265 |
< |
uvp[0] = U_NEU; |
253 |
< |
uvp[1] = V_NEU; |
265 |
> |
uvp[0] = U_NEU; uvp[1] = V_NEU; |
266 |
|
} |
267 |
|
uv2rgb(ld->rgbval[j], tmTop, uvp); |
268 |
|
setuv(ld, j); |