18 #ifndef MAGICKCORE_COLORSPACE_PRIVATE_H
19 #define MAGICKCORE_COLORSPACE_PRIVATE_H
21 #include "MagickCore/image.h"
22 #include "MagickCore/image-private.h"
23 #include "MagickCore/pixel.h"
24 #include "MagickCore/pixel-accessor.h"
26 #if defined(__cplusplus) || defined(c_plusplus)
30 static inline void ConvertCMYKToRGB(
PixelInfo *pixel)
32 pixel->red=((QuantumRange-(QuantumScale*pixel->red*(QuantumRange-
33 pixel->black)+pixel->black)));
34 pixel->green=((QuantumRange-(QuantumScale*pixel->green*(QuantumRange-
35 pixel->black)+pixel->black)));
36 pixel->blue=((QuantumRange-(QuantumScale*pixel->blue*(QuantumRange-
37 pixel->black)+pixel->black)));
40 static inline void ConvertRGBToCMYK(
PixelInfo *pixel)
51 if (pixel->colorspace != sRGBColorspace)
53 red=QuantumScale*pixel->red;
54 green=QuantumScale*pixel->green;
55 blue=QuantumScale*pixel->blue;
59 red=QuantumScale*DecodePixelGamma(pixel->red);
60 green=QuantumScale*DecodePixelGamma(pixel->green);
61 blue=QuantumScale*DecodePixelGamma(pixel->blue);
63 if ((fabs((
double) red) < MagickEpsilon) &&
64 (fabs((
double) green) < MagickEpsilon) &&
65 (fabs((
double) blue) < MagickEpsilon))
67 pixel->black=(MagickRealType) QuantumRange;
70 cyan=(MagickRealType) (1.0-red);
71 magenta=(MagickRealType) (1.0-green);
72 yellow=(MagickRealType) (1.0-blue);
78 cyan=(MagickRealType) (PerceptibleReciprocal(1.0-black)*(cyan-black));
79 magenta=(MagickRealType) (PerceptibleReciprocal(1.0-black)*(magenta-black));
80 yellow=(MagickRealType) (PerceptibleReciprocal(1.0-black)*(yellow-black));
81 pixel->colorspace=CMYKColorspace;
82 pixel->red=QuantumRange*cyan;
83 pixel->green=QuantumRange*magenta;
84 pixel->blue=QuantumRange*yellow;
85 pixel->black=QuantumRange*black;
88 static inline MagickBooleanType IsCMYKColorspace(
89 const ColorspaceType colorspace)
91 if (colorspace == CMYKColorspace)
96 static inline MagickBooleanType IsGrayColorspace(
97 const ColorspaceType colorspace)
99 if ((colorspace == LinearGRAYColorspace) || (colorspace == GRAYColorspace))
104 static inline MagickBooleanType IsGrayImageType(
const ImageType type)
106 if ((type == GrayscaleType) || (type == GrayscaleAlphaType) ||
107 (type == BilevelType))
112 static inline MagickBooleanType IsHueCompatibleColorspace(
113 const ColorspaceType colorspace)
115 if ((colorspace == HCLColorspace) || (colorspace == HCLpColorspace) ||
116 (colorspace == HSBColorspace) || (colorspace == HSIColorspace) ||
117 (colorspace == HSLColorspace) || (colorspace == HSVColorspace))
122 static inline MagickBooleanType IsRGBColorspace(
const ColorspaceType colorspace)
124 if ((colorspace == RGBColorspace) || (colorspace == scRGBColorspace) ||
125 (colorspace == LinearGRAYColorspace))
130 static inline MagickBooleanType IssRGBColorspace(
131 const ColorspaceType colorspace)
133 if ((colorspace == sRGBColorspace) || (colorspace == TransparentColorspace))
138 static inline MagickBooleanType IssRGBCompatibleColorspace(
139 const ColorspaceType colorspace)
141 if ((colorspace == sRGBColorspace) || (colorspace == RGBColorspace) ||
142 (colorspace == Adobe98Colorspace) || (colorspace == ProPhotoColorspace) ||
143 (colorspace == DisplayP3Colorspace) || (colorspace == scRGBColorspace) ||
144 (colorspace == TransparentColorspace) || (colorspace == GRAYColorspace) ||
145 (colorspace == LinearGRAYColorspace))
150 static inline MagickBooleanType IsYCbCrCompatibleColorspace(
151 const ColorspaceType colorspace)
153 if ((colorspace == YCbCrColorspace) ||
154 (colorspace == Rec709YCbCrColorspace) ||
155 (colorspace == Rec601YCbCrColorspace))
160 #if defined(__cplusplus) || defined(c_plusplus)