| 10 |
|
|
| 11 |
|
#include "color.h" |
| 12 |
|
|
| 13 |
+ |
#define CEPS 1e-7 /* color epsilon */ |
| 14 |
|
|
| 15 |
+ |
|
| 16 |
|
RGBPRIMS stdprims = STDPRIMS; /* standard primary chromaticities */ |
| 17 |
|
|
| 18 |
|
COLOR cblack = BLKCOLOR; /* global black color */ |
| 153 |
|
vv = 1.; /* check each limit */ |
| 154 |
|
for (i = 0; i < 3; i++) |
| 155 |
|
if (gamut & CGAMUT_LOWER && col[i] < lower[i]) { |
| 156 |
< |
v = (lower[i] - cgry[i])/(col[i] - cgry[i]); |
| 156 |
> |
v = (lower[i]+CEPS - cgry[i])/(col[i] - cgry[i]); |
| 157 |
|
if (v < vv) vv = v; |
| 158 |
|
rflags |= CGAMUT_LOWER; |
| 159 |
|
} else if (gamut & CGAMUT_UPPER && col[i] > upper[i]) { |
| 160 |
< |
v = (upper[i] - cgry[i])/(col[i] - cgry[i]); |
| 160 |
> |
v = (upper[i]-CEPS - cgry[i])/(col[i] - cgry[i]); |
| 161 |
|
if (v < vv) vv = v; |
| 162 |
|
rflags |= CGAMUT_UPPER; |
| 163 |
|
} |
| 172 |
|
register COLORMAT mat; |
| 173 |
|
register COLOR c1, c2; |
| 174 |
|
{ |
| 175 |
< |
c2[0] = mat[0][0]*c1[0] + mat[0][1]*c1[1] + mat[0][2]*c1[2]; |
| 176 |
< |
c2[1] = mat[1][0]*c1[0] + mat[1][1]*c1[1] + mat[1][2]*c1[2]; |
| 177 |
< |
c2[2] = mat[2][0]*c1[0] + mat[2][1]*c1[1] + mat[2][2]*c1[2]; |
| 175 |
> |
COLOR cout; |
| 176 |
> |
|
| 177 |
> |
cout[0] = mat[0][0]*c1[0] + mat[0][1]*c1[1] + mat[0][2]*c1[2]; |
| 178 |
> |
cout[1] = mat[1][0]*c1[0] + mat[1][1]*c1[1] + mat[1][2]*c1[2]; |
| 179 |
> |
cout[2] = mat[2][0]*c1[0] + mat[2][1]*c1[1] + mat[2][2]*c1[2]; |
| 180 |
> |
|
| 181 |
> |
copycolor(c2, cout); |
| 182 |
|
} |
| 183 |
|
|
| 184 |
|
|