]> granicus.if.org Git - imagemagick/blobdiff - MagickCore/colorspace-private.h
sigmoidal-contrast: prevent argument out of range and remove unnecessary ClampToQuantum
[imagemagick] / MagickCore / colorspace-private.h
index c8418807104c1890c6c7bbf6dfc1ea4016efd23e..d5f598b59bd45d3bf73d7098ab4eaa0716e91c2f 100644 (file)
@@ -27,9 +27,9 @@ extern "C" {
 #include <MagickCore/pixel.h>
 #include <MagickCore/pixel-accessor.h>
 
-static inline void ConvertsRGBToCMYK(PixelInfo *pixel)
+static inline void ConvertRGBToCMYK(PixelInfo *pixel)
 {
-  MagickRealType
+  double
     black,
     blue,
     cyan,
@@ -38,26 +38,35 @@ static inline void ConvertsRGBToCMYK(PixelInfo *pixel)
     red,
     yellow;
                                                                                 
-  red=DecompandsRGB(QuantumScale*pixel->red);
-  green=DecompandsRGB(QuantumScale*pixel->green);
-  blue=DecompandsRGB(QuantumScale*pixel->blue);
+  if (pixel->colorspace != sRGBColorspace)
+    {
+      red=QuantumScale*pixel->red;
+      green=QuantumScale*pixel->green;
+      blue=QuantumScale*pixel->blue;
+    }
+  else
+    {
+      red=InversesRGBCompandor(pixel->red);
+      green=InversesRGBCompandor(pixel->green);
+      blue=InversesRGBCompandor(pixel->blue);
+    }
   if ((fabs(red) < MagickEpsilon) && (fabs(green) < MagickEpsilon) &&
       (fabs(blue) < MagickEpsilon))
     {
-      pixel->black=(MagickRealType) QuantumRange;
+      pixel->black=(double) QuantumRange;
       return;
     }
-  cyan=(MagickRealType) (1.0-red);
-  magenta=(MagickRealType) (1.0-green);
-  yellow=(MagickRealType) (1.0-blue);
+  cyan=(double) (1.0-red);
+  magenta=(double) (1.0-green);
+  yellow=(double) (1.0-blue);
   black=cyan;
   if (magenta < black)
     black=magenta;
   if (yellow < black)
     black=yellow;
-  cyan=(MagickRealType) ((cyan-black)/(1.0-black));
-  magenta=(MagickRealType) ((magenta-black)/(1.0-black));
-  yellow=(MagickRealType) ((yellow-black)/(1.0-black));
+  cyan=(double) ((cyan-black)/(1.0-black));
+  magenta=(double) ((magenta-black)/(1.0-black));
+  yellow=(double) ((yellow-black)/(1.0-black));
   pixel->colorspace=CMYKColorspace;
   pixel->red=QuantumRange*cyan;
   pixel->green=QuantumRange*magenta;