/*
- Copyright 1999-2011 ImageMagick Studio LLC, a non-profit organization
+ Copyright 1999-2012 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.
#include <MagickCore/image.h>
#include <MagickCore/image-private.h>
#include <MagickCore/pixel.h>
+#include <MagickCore/pixel-accessor.h>
static inline void ConvertRGBToCMYK(PixelInfo *pixel)
{
- MagickRealType
+ double
black,
+ blue,
cyan,
+ green,
magenta,
+ red,
yellow;
- if ((pixel->red == 0) && (pixel->green == 0) && (pixel->blue == 0))
+ if (pixel->colorspace != sRGBColorspace)
{
- pixel->black=(MagickRealType) QuantumRange;
+ 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=(double) QuantumRange;
return;
}
- cyan=(MagickRealType) (1.0-QuantumScale*pixel->red);
- magenta=(MagickRealType) (1.0-QuantumScale*pixel->green);
- yellow=(MagickRealType) (1.0-QuantumScale*pixel->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;
pixel->black=QuantumRange*black;
}
+static inline MagickBooleanType IsCMYKColorspace(
+ const ColorspaceType colorspace)
+{
+ if (colorspace == CMYKColorspace)
+ return(MagickTrue);
+ return(MagickFalse);
+}
+
static inline MagickBooleanType IsGrayColorspace(
const ColorspaceType colorspace)
{
return(MagickFalse);
}
-static inline MagickBooleanType IsRGBColorspace(
+static inline MagickBooleanType IsRGBColorspace(const ColorspaceType colorspace)
+{
+ if (colorspace == RGBColorspace)
+ return(MagickTrue);
+ return(MagickFalse);
+}
+
+static inline MagickBooleanType IssRGBColorspace(
+ const ColorspaceType colorspace)
+{
+ if ((colorspace == sRGBColorspace) || (colorspace == TransparentColorspace))
+ return(MagickTrue);
+ return(MagickFalse);
+}
+
+static inline MagickBooleanType IssRGBCompatibleColorspace(
const ColorspaceType colorspace)
{
- if ((IsGrayColorspace(colorspace) != MagickFalse) ||
- (colorspace == RGBColorspace) || (colorspace == TransparentColorspace))
+ if ((colorspace == sRGBColorspace) || (colorspace == TransparentColorspace) ||
+ (colorspace == RGBColorspace) || (colorspace == GRAYColorspace))
return(MagickTrue);
return(MagickFalse);
}