]> granicus.if.org Git - imagemagick/blobdiff - MagickCore/gem.c
Update web pages
[imagemagick] / MagickCore / gem.c
index 1cd5bad6e7603410b23447274bc7b7d89112a538..b82affa2a0f36a9b9851852cfbf829bb95a51d75 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-2015 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  %
@@ -762,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
@@ -815,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
@@ -847,31 +847,13 @@ MagickPrivate void ConvertLCHuvToRGB(const double luma,const double chroma,
 %      component of the HCL color space.
 %
 */
-
-static inline double MagickMax(const double x,const double y)
-{
-  if (x > y)
-    return(x);
-  return(y);
-}
-
-static inline double MagickMin(const double x,const double y)
-{
-  if (x < y)
-    return(x);
-  return(y);
-}
-
 MagickPrivate void ConvertRGBToHCL(const double red,const double green,
   const double blue,double *hue,double *chroma,double *luma)
 {
   double
-    b,
     c,
-    g,
     h,
-    max,
-    r;
+    max;
 
   /*
     Convert RGB to HCL colorspace.
@@ -879,26 +861,23 @@ MagickPrivate void ConvertRGBToHCL(const double red,const double green,
   assert(hue != (double *) NULL);
   assert(chroma != (double *) NULL);
   assert(luma != (double *) NULL);
-  r=red;
-  g=green;
-  b=blue;
-  max=MagickMax(r,MagickMax(g,b));
-  c=max-(double) MagickMin(r,MagickMin(g,b));
+  max=MagickMax(red,MagickMax(green,blue));
+  c=max-(double) MagickMin(red,MagickMin(green,blue));
   h=0.0;
   if (c == 0.0)
     h=0.0;
   else
     if (red == max)
-      h=fmod((g-b)/c+6.0,6.0);
+      h=fmod((green-blue)/c+6.0,6.0);
     else
       if (green == max)
-        h=((b-r)/c)+2.0;
+        h=((blue-red)/c)+2.0;
       else
         if (blue == max)
-          h=((r-g)/c)+4.0;
+          h=((red-green)/c)+4.0;
   *hue=(h/6.0);
   *chroma=QuantumScale*c;
-  *luma=QuantumScale*(0.298839*r+0.586811*g+0.114350*b);
+  *luma=QuantumScale*(0.298839*red+0.586811*green+0.114350*blue);
 }
 \f
 /*
@@ -933,12 +912,9 @@ MagickPrivate void ConvertRGBToHCLp(const double red,const double green,
   const double blue,double *hue,double *chroma,double *luma)
 {
   double
-    b,
     c,
-    g,
     h,
-    max,
-    r;
+    max;
 
   /*
     Convert RGB to HCL colorspace.
@@ -946,26 +922,23 @@ MagickPrivate void ConvertRGBToHCLp(const double red,const double green,
   assert(hue != (double *) NULL);
   assert(chroma != (double *) NULL);
   assert(luma != (double *) NULL);
-  r=red;
-  g=green;
-  b=blue;
-  max=MagickMax(r,MagickMax(g,b));
-  c=max-(double) MagickMin(r,MagickMin(g,b));
+  max=MagickMax(red,MagickMax(green,blue));
+  c=max-MagickMin(red,MagickMin(green,blue));
   h=0.0;
   if (c == 0.0)
     h=0.0;
   else
     if (red == max)
-      h=fmod((g-b)/c+6.0,6.0);
+      h=fmod((green-blue)/c+6.0,6.0);
     else
       if (green == max)
-        h=((b-r)/c)+2.0;
+        h=((blue-red)/c)+2.0;
       else
         if (blue == max)
-          h=((r-g)/c)+4.0;
+          h=((red-green)/c)+4.0;
   *hue=(h/6.0);
   *chroma=QuantumScale*c;
-  *luma=QuantumScale*(0.298839*r+0.586811*g+0.114350*b);
+  *luma=QuantumScale*(0.298839*red+0.586811*green+0.114350*blue);
 }
 \f
 /*
@@ -1000,12 +973,9 @@ MagickPrivate void ConvertRGBToHSB(const double red,const double green,
   const double blue,double *hue,double *saturation,double *brightness)
 {
   double
-    b,
     delta,
-    g,
     max,
-    min,
-    r;
+    min;
 
   /*
     Convert RGB to HSB colorspace.
@@ -1016,15 +986,12 @@ MagickPrivate void ConvertRGBToHSB(const double red,const double green,
   *hue=0.0;
   *saturation=0.0;
   *brightness=0.0;
-  r=red;
-  g=green;
-  b=blue;
-  min=r < g ? r : g;
-  if (b < min)
-    min=b;
-  max=r > g ? r : g;
-  if (b > max)
-    max=b;
+  min=red < green ? red : green;
+  if (blue < min)
+    min=blue;
+  max=red > green ? red : green;
+  if (blue > max)
+    max=blue;
   if (max == 0.0)
     return;
   delta=max-min;
@@ -1032,13 +999,13 @@ MagickPrivate void ConvertRGBToHSB(const double red,const double green,
   *brightness=QuantumScale*max;
   if (delta == 0.0)
     return;
-  if (r == max)
-    *hue=(g-b)/delta;
+  if (red == max)
+    *hue=(green-blue)/delta;
   else
-    if (g == max)
-      *hue=2.0+(b-r)/delta;
+    if (green == max)
+      *hue=2.0+(blue-red)/delta;
     else
-      *hue=4.0+(r-g)/delta;
+      *hue=4.0+(red-green)/delta;
   *hue/=6.0;
   if (*hue < 0.0)
     *hue+=1.0;
@@ -1274,11 +1241,8 @@ MagickPrivate void ConvertRGBToHWB(const double red,const double green,
   const double blue,double *hue,double *whiteness,double *blackness)
 {
   double
-    b,
     f,
-    g,
     p,
-    r,
     v,
     w;
 
@@ -1288,11 +1252,8 @@ MagickPrivate void ConvertRGBToHWB(const double red,const double green,
   assert(hue != (double *) NULL);
   assert(whiteness != (double *) NULL);
   assert(blackness != (double *) NULL);
-  r=red;
-  g=green;
-  b=blue;
-  w=MagickMin(r,MagickMin(g,b));
-  v=MagickMax(r,MagickMax(g,b));
+  w=MagickMin(red,MagickMin(green,blue));
+  v=MagickMax(red,MagickMax(green,blue));
   *blackness=1.0-QuantumScale*v;
   *whiteness=QuantumScale*w;
   if (v == w)
@@ -1300,8 +1261,8 @@ MagickPrivate void ConvertRGBToHWB(const double red,const double green,
       *hue=(-1.0);
       return;
     }
-  f=(r == w) ? g-b : ((g == w) ? b-r : r-g);
-  p=(r == w) ? 3.0 : ((g == w) ? 5.0 : 1.0);
+  f=(red == w) ? green-blue : ((green == w) ? blue-red : red-green);
+  p=(red == w) ? 3.0 : ((green == w) ? 5.0 : 1.0);
   *hue=(p-f/(v-1.0*w))/6.0;
 }
 \f
@@ -1342,10 +1303,8 @@ 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=(*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;
 }
@@ -1405,10 +1364,8 @@ 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=(*chroma+134.0)/354.0;
-  *hue=(*hue+140.0)/262.0;
+  *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+=1.0;
 }