#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,
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;