]> granicus.if.org Git - imagemagick/blobdiff - MagickCore/gem.c
(no commit message)
[imagemagick] / MagickCore / gem.c
index 37cb75a9cff31d31d1a0bc849acf42eaca00ea2c..7085742e1137a56033a9274e6f1aeaa7c01935e0 100644 (file)
 %                    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  %
@@ -390,7 +390,10 @@ MagickPrivate void ConvertHSIToRGB(const double hue,const double saturation,
   const double intensity,double *red,double *green,double *blue)
 {
   double
-    h;
+    b,
+    g,
+    h,
+    r;
 
   /*
     Convert HSI to RGB colorspace.
@@ -402,31 +405,31 @@ MagickPrivate void ConvertHSIToRGB(const double hue,const double saturation,
   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
 /*
@@ -759,7 +762,7 @@ MagickPrivate void ConvertLCHabToRGB(const double luma,const double chroma,
   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
@@ -812,7 +815,7 @@ MagickPrivate void ConvertLCHuvToRGB(const double luma,const double chroma,
   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
@@ -1339,12 +1342,10 @@ static inline void ConvertXYZToLCHab(const double X,const double Y,
     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=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+=360.0;
-  *chroma=(*chroma)/255.0+0.5;
-  *hue=(*hue)/255.0+0.5;
+    *hue+=1.0;
 }
 
 MagickPrivate void ConvertRGBToLCHab(const double red,const double green,
@@ -1402,12 +1403,10 @@ static inline void ConvertXYZToLCHuv(const double X,const double Y,
     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,