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)
30static inline void ConvertCMYKToRGB(
PixelInfo *pixel)
32 pixel->red=(((double) QuantumRange-(QuantumScale*pixel->red*
33 ((
double) QuantumRange-pixel->black)+pixel->black)));
34 pixel->green=(((double) QuantumRange-(QuantumScale*pixel->green*
35 ((
double) QuantumRange-pixel->black)+pixel->black)));
36 pixel->blue=(((double) QuantumRange-(QuantumScale*pixel->blue*
37 ((
double) QuantumRange-pixel->black)+pixel->black)));
40static 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=(MagickRealType) QuantumRange*cyan;
83 pixel->green=(MagickRealType) QuantumRange*magenta;
84 pixel->blue=(MagickRealType) QuantumRange*yellow;
85 pixel->black=(MagickRealType) QuantumRange*black;
88static inline MagickBooleanType IsCMYKColorspace(
89 const ColorspaceType colorspace)
91 if (colorspace == CMYKColorspace)
96static inline MagickBooleanType IsGrayColorspace(
97 const ColorspaceType colorspace)
99 if ((colorspace == LinearGRAYColorspace) || (colorspace == GRAYColorspace))
104static inline MagickBooleanType IsGrayImageType(
const ImageType type)
106 if ((type == GrayscaleType) || (type == GrayscaleAlphaType) ||
107 (type == BilevelType))
112static inline MagickBooleanType IsHueCompatibleColorspace(
113 const ColorspaceType colorspace)
115 if ((colorspace == HCLColorspace) || (colorspace == HCLpColorspace) ||
116 (colorspace == HSBColorspace) || (colorspace == HSIColorspace) ||
117 (colorspace == HSLColorspace) || (colorspace == HSVColorspace))
122static inline MagickBooleanType IsLabCompatibleColorspace(
123 const ColorspaceType colorspace)
125 if ((colorspace == LabColorspace) || (colorspace == LCHColorspace) ||
126 (colorspace == LCHabColorspace) || (colorspace == LCHuvColorspace) ||
127 (colorspace == OklabColorspace) || (colorspace == OklchColorspace))
132static inline MagickBooleanType IsRGBColorspace(
const ColorspaceType colorspace)
134 if ((colorspace == RGBColorspace) || (colorspace == scRGBColorspace) ||
135 (colorspace == LinearGRAYColorspace))
140static inline MagickBooleanType IssRGBColorspace(
141 const ColorspaceType colorspace)
143 if ((colorspace == sRGBColorspace) || (colorspace == TransparentColorspace))
148static inline MagickBooleanType IssRGBCompatibleColorspace(
149 const ColorspaceType colorspace)
151 if ((colorspace == sRGBColorspace) || (colorspace == RGBColorspace) ||
152 (colorspace == Adobe98Colorspace) || (colorspace == ProPhotoColorspace) ||
153 (colorspace == DisplayP3Colorspace) || (colorspace == scRGBColorspace) ||
154 (colorspace == TransparentColorspace) || (colorspace == GRAYColorspace) ||
155 (colorspace == LinearGRAYColorspace))
160static inline MagickBooleanType IsYCbCrCompatibleColorspace(
161 const ColorspaceType colorspace)
163 if ((colorspace == YCbCrColorspace) ||
164 (colorspace == Rec709YCbCrColorspace) ||
165 (colorspace == Rec601YCbCrColorspace))
170#if defined(__cplusplus) || defined(c_plusplus)