Y,
Z;
- ConvertLuvToXYZ(L,u,v,&X,&Y,&Z);
+ ConvertLuvToXYZ(100.0*L,(354.0*u-134.0),262.0*v-140.0,&X,&Y,&Z);
ConvertXYZToRGB(X,Y,Z,red,green,blue);
}
assert(X != (double *) NULL);
assert(Y != (double *) NULL);
assert(Z != (double *) NULL);
- if ((100.0*L) > (CIEK*CIEEpsilon))
- *Y=(double) pow(((100.0*L)+16.0)/116.0,3.0);
+ if (L > (CIEK*CIEEpsilon))
+ *Y=(double) pow((L+16.0)/116.0,3.0);
else
- *Y=(100.0*L)/CIEK;
- *X=((*Y*((39.0*(100.0*L)/((262.0*v-140.0)+13.0*(100.0*L)*(9.0*D65Y/
- (D65X+15.0*D65Y+3.0*D65Z))))-5.0))+5.0*(*Y))/((((52.0f*(100.0*L)/
- ((354.0*u-134.0)+13.0*(100.0*L)*(4.0*D65X/(D65X+15.0*D65Y+3.0*
- D65Z))))-1.0)/3.0)-(-1.0/3.0));
- *Z=(*X*(((52.0f*(100.0*L)/((354.0*u-134.0)+13.0*(100.0*L)*(4.0*D65X/
- (D65X+15.0*D65Y+3.0*D65Z))))-1.0)/3.0))-5.0*(*Y);
+ *Y=L/CIEK;
+ *X=((*Y*((39.0*L/(v+13.0*L*(9.0*D65Y/(D65X+15.0*D65Y+3.0*D65Z))))-5.0))+
+ 5.0*(*Y))/((((52.0f*L/(u+13.0*L*(4.0*D65X/(D65X+15.0*D65Y+3.0*D65Z))))-1.0)/
+ 3.0)-(-1.0/3.0));
+ *Z=(*X*(((52.0f*L/(u+13.0*L*(4.0*D65X/(D65X+15.0*D65Y+3.0*D65Z))))-1.0)/3.0))-
+ 5.0*(*Y);
}
static inline void ConvertRGBToXYZ(const double red,const double green,
% o red, green, blue: A pointer to a pixel component of type Quantum.
%
*/
+
+static inline void ConvertLCHuvToXYZ(const double luma,const double chroma,
+ const double hue,double *X,double *Y,double *Z)
+{
+ ConvertLuvToXYZ(luma,chroma*cos(hue*MagickPI/180.0),chroma*
+ sin(hue*MagickPI/180.0),X,Y,Z);
+}
+
MagickPrivate void ConvertLCHuvToRGB(const double luma,const double chroma,
const double hue,double *red,double *green,double *blue)
{
double
- C,
- H,
- L,
- u,
- v,
X,
Y,
Z;
assert(red != (double *) NULL);
assert(green != (double *) NULL);
assert(blue != (double *) NULL);
- L=luma;
- C=chroma;
- H=hue;
- u=C*cos(360.0*H*MagickPI/180.0);
- v=C*sin(360.0*H*MagickPI/180.0);
- ConvertLuvToXYZ(L,(100.0*u+134.0)/354.0,(100.0*v+140.0)/262.0,&X,&Y,&Z);
+ ConvertLCHuvToXYZ(100.0*luma,354.0*chroma-134.0,262.0*hue-140.0,&X,&Y,&Z);
ConvertXYZToRGB(X,Y,Z,red,green,blue);
}
\f