MagickCore 7.1.1
Convert, Edit, Or Compose Bitmap Images
Loading...
Searching...
No Matches
colorspace-private.h
1/*
2 Copyright @ 1999 ImageMagick Studio LLC, a non-profit organization
3 dedicated to making software imaging solutions freely available.
4
5 You may not use this file except in compliance with the License. You may
6 obtain a copy of the License at
7
8 https://imagemagick.org/script/license.php
9
10 Unless required by applicable law or agreed to in writing, software
11 distributed under the License is distributed on an "AS IS" BASIS,
12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 See the License for the specific language governing permissions and
14 limitations under the License.
15
16 MagickCore image colorspace private methods.
17*/
18#ifndef MAGICKCORE_COLORSPACE_PRIVATE_H
19#define MAGICKCORE_COLORSPACE_PRIVATE_H
20
21#include "MagickCore/image.h"
22#include "MagickCore/image-private.h"
23#include "MagickCore/pixel.h"
24#include "MagickCore/pixel-accessor.h"
25
26#if defined(__cplusplus) || defined(c_plusplus)
27extern "C" {
28#endif
29
30static inline void ConvertCMYKToRGB(PixelInfo *pixel)
31{
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)));
38}
39
40static inline void ConvertRGBToCMYK(PixelInfo *pixel)
41{
42 MagickRealType
43 black,
44 blue,
45 cyan,
46 green,
47 magenta,
48 red,
49 yellow;
50
51 if (pixel->colorspace != sRGBColorspace)
52 {
53 red=QuantumScale*pixel->red;
54 green=QuantumScale*pixel->green;
55 blue=QuantumScale*pixel->blue;
56 }
57 else
58 {
59 red=QuantumScale*DecodePixelGamma(pixel->red);
60 green=QuantumScale*DecodePixelGamma(pixel->green);
61 blue=QuantumScale*DecodePixelGamma(pixel->blue);
62 }
63 if ((fabs((double) red) < MagickEpsilon) &&
64 (fabs((double) green) < MagickEpsilon) &&
65 (fabs((double) blue) < MagickEpsilon))
66 {
67 pixel->black=(MagickRealType) QuantumRange;
68 return;
69 }
70 cyan=(MagickRealType) (1.0-red);
71 magenta=(MagickRealType) (1.0-green);
72 yellow=(MagickRealType) (1.0-blue);
73 black=cyan;
74 if (magenta < black)
75 black=magenta;
76 if (yellow < black)
77 black=yellow;
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;
86}
87
88static inline MagickBooleanType IsCMYKColorspace(
89 const ColorspaceType colorspace)
90{
91 if (colorspace == CMYKColorspace)
92 return(MagickTrue);
93 return(MagickFalse);
94}
95
96static inline MagickBooleanType IsGrayColorspace(
97 const ColorspaceType colorspace)
98{
99 if ((colorspace == LinearGRAYColorspace) || (colorspace == GRAYColorspace))
100 return(MagickTrue);
101 return(MagickFalse);
102}
103
104static inline MagickBooleanType IsGrayImageType(const ImageType type)
105{
106 if ((type == GrayscaleType) || (type == GrayscaleAlphaType) ||
107 (type == BilevelType))
108 return(MagickTrue);
109 return(MagickFalse);
110}
111
112static inline MagickBooleanType IsHueCompatibleColorspace(
113 const ColorspaceType colorspace)
114{
115 if ((colorspace == HCLColorspace) || (colorspace == HCLpColorspace) ||
116 (colorspace == HSBColorspace) || (colorspace == HSIColorspace) ||
117 (colorspace == HSLColorspace) || (colorspace == HSVColorspace))
118 return(MagickTrue);
119 return(MagickFalse);
120}
121
122static inline MagickBooleanType IsLabCompatibleColorspace(
123 const ColorspaceType colorspace)
124{
125 if ((colorspace == LabColorspace) || (colorspace == LCHColorspace) ||
126 (colorspace == LCHabColorspace) || (colorspace == LCHuvColorspace) ||
127 (colorspace == OklabColorspace) || (colorspace == OklchColorspace))
128 return(MagickTrue);
129 return(MagickFalse);
130}
131
132static inline MagickBooleanType IsRGBColorspace(const ColorspaceType colorspace)
133{
134 if ((colorspace == RGBColorspace) || (colorspace == scRGBColorspace) ||
135 (colorspace == LinearGRAYColorspace))
136 return(MagickTrue);
137 return(MagickFalse);
138}
139
140static inline MagickBooleanType IssRGBColorspace(
141 const ColorspaceType colorspace)
142{
143 if ((colorspace == sRGBColorspace) || (colorspace == TransparentColorspace))
144 return(MagickTrue);
145 return(MagickFalse);
146}
147
148static inline MagickBooleanType IssRGBCompatibleColorspace(
149 const ColorspaceType colorspace)
150{
151 if ((colorspace == sRGBColorspace) || (colorspace == RGBColorspace) ||
152 (colorspace == Adobe98Colorspace) || (colorspace == ProPhotoColorspace) ||
153 (colorspace == DisplayP3Colorspace) || (colorspace == scRGBColorspace) ||
154 (colorspace == TransparentColorspace) || (colorspace == GRAYColorspace) ||
155 (colorspace == LinearGRAYColorspace))
156 return(MagickTrue);
157 return(MagickFalse);
158}
159
160static inline MagickBooleanType IsYCbCrCompatibleColorspace(
161 const ColorspaceType colorspace)
162{
163 if ((colorspace == YCbCrColorspace) ||
164 (colorspace == Rec709YCbCrColorspace) ||
165 (colorspace == Rec601YCbCrColorspace))
166 return(MagickTrue);
167 return(MagickFalse);
168}
169
170#if defined(__cplusplus) || defined(c_plusplus)
171}
172#endif
173
174#endif