% Graphic Gems - Graphic Support Methods %
% %
% Software Design %
-% John Cristy %
+% Cristy %
% August 1996 %
% %
% %
-% Copyright 1999-2013 ImageMagick Studio LLC, a non-profit organization %
+% Copyright 1999-2014 ImageMagick Studio LLC, a non-profit organization %
% dedicated to making software imaging solutions freely available. %
% %
% You may not use this file except in compliance with the License. You may %
const double intensity,double *red,double *green,double *blue)
{
double
- h;
+ b,
+ g,
+ h,
+ r;
/*
Convert HSI to RGB colorspace.
h-=360.0*floor(h/360.0);
if (h < 120.0)
{
- *blue=intensity*(1.0-saturation);
- *red=intensity*(1.0+saturation*cos(h*(MagickPI/180.0))/cos((60.0-h)*
+ b=intensity*(1.0-saturation);
+ r=intensity*(1.0+saturation*cos(h*(MagickPI/180.0))/cos((60.0-h)*
(MagickPI/180.0)));
- *green=3.0*intensity-*red-*blue;
+ g=3.0*intensity-r-b;
}
else
if (h < 240.0)
{
h-=120.0;
- *red=intensity*(1.0-saturation);
- *green=intensity*(1.0+saturation*cos(h*(MagickPI/180.0))/cos((60.0-h)*
+ r=intensity*(1.0-saturation);
+ g=intensity*(1.0+saturation*cos(h*(MagickPI/180.0))/cos((60.0-h)*
(MagickPI/180.0)));
- *blue=3.0*intensity-*red-*green;
+ b=3.0*intensity-r-g;
}
else
{
h-=240.0;
- *green=intensity*(1.0-saturation);
- *blue=intensity*(1.0+saturation*cos(h*(MagickPI/180.0))/cos((60.0-h)*
+ g=intensity*(1.0-saturation);
+ b=intensity*(1.0+saturation*cos(h*(MagickPI/180.0))/cos((60.0-h)*
(MagickPI/180.0)));
- *red=3.0*intensity-*green-*blue;
+ r=3.0*intensity-g-b;
}
- *red*=QuantumRange;
- *green*=QuantumRange;
- *blue*=QuantumRange;
+ *red=QuantumRange*r;
+ *green=QuantumRange*g;
+ *blue=QuantumRange*b;
}
\f
/*
assert(red != (double *) NULL);
assert(green != (double *) NULL);
assert(blue != (double *) NULL);
- ConvertLCHabToXYZ(100.0*luma,255.0*(chroma-0.5),255.0*(hue-0.5),&X,&Y,&Z);
+ ConvertLCHabToXYZ(100.0*luma,255.0*(chroma-0.5),360.0*hue,&X,&Y,&Z);
ConvertXYZToRGB(X,Y,Z,red,green,blue);
}
\f
assert(red != (double *) NULL);
assert(green != (double *) NULL);
assert(blue != (double *) NULL);
- ConvertLCHuvToXYZ(100.0*luma,354.0*chroma-134.0,262.0*hue-140.0,&X,&Y,&Z);
+ ConvertLCHuvToXYZ(100.0*luma,255.0*(chroma-0.5),360.0*hue,&X,&Y,&Z);
ConvertXYZToRGB(X,Y,Z,red,green,blue);
}
\f
b;
ConvertXYZToLab(X,Y,Z,luma,&a,&b);
- *chroma=hypot(255.0*(a-0.5),255.0*(b-0.5));
- *hue=180.0*atan2(255.0*(b-0.5),255.0*(a-0.5))/MagickPI;
- *chroma=(*chroma)/255.0+0.5;
- *hue=(*hue)/255.0+0.5;
+ *chroma=hypot(255.0*(a-0.5),255.0*(b-0.5))/255.0+0.5;
+ *hue=180.0*atan2(255.0*(b-0.5),255.0*(a-0.5))/MagickPI/360.0;
if (*hue < 0.0)
*hue+=1.0;
}
v;
ConvertXYZToLuv(X,Y,Z,luma,&u,&v);
- *chroma=hypot(354.0*u-134.0,262.0*v-140.0);
- *hue=180.0*atan2(262.0*v-140.0,354.0*u-134.0)/MagickPI;
+ *chroma=hypot(354.0*u-134.0,262.0*v-140.0)/255.0+0.5;
+ *hue=180.0*atan2(262.0*v-140.0,354.0*u-134.0)/MagickPI/360.0;
if (*hue < 0.0)
- *hue+=360.0;
- *chroma=(*chroma+134.0)/354.0;
- *hue=(*hue+140.0)/262.0;
+ *hue+=1.0;
}
MagickPrivate void ConvertRGBToLCHuv(const double red,const double green,