MagickCore 7.1.2
Convert, Edit, Or Compose Bitmap Images
Loading...
Searching...
No Matches
image-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/license/
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 private methods.
17*/
18#ifndef MAGICKCORE_IMAGE_PRIVATE_H
19#define MAGICKCORE_IMAGE_PRIVATE_H
20
21#if defined(__cplusplus) || defined(c_plusplus)
22extern "C" {
23#endif
24
25#define MagickMax(x,y) (((x) > (y)) ? (x) : (y))
26#define MagickMin(x,y) (((x) < (y)) ? (x) : (y))
27
28#include "MagickCore/pixel-accessor.h"
29#include "MagickCore/quantum-private.h"
30
31#define BackgroundColor "#ffffff" /* white */
32#define BackgroundColorRGBA QuantumRange,QuantumRange,QuantumRange,OpaqueAlpha
33#define BorderColor "#dfdfdf" /* gray */
34#define BorderColorRGBA ScaleShortToQuantum(0xdfdf),\
35 ScaleShortToQuantum(0xdfdf),ScaleShortToQuantum(0xdfdf),OpaqueAlpha
36#define DefaultResolution 72.0
37#define DefaultTileFrame "15x15+3+3"
38#define DefaultTileGeometry "120x120+4+3>"
39#define DefaultTileLabel "%f\n%G\n%b"
40#define ForegroundColor "#000" /* black */
41#define ForegroundColorRGBA 0,0,0,OpaqueAlpha
42#define LoadImagesTag "Load/Images"
43#define LoadImageTag "Load/Image"
44#define Magick2PI 6.28318530717958647692528676655900576839433879875020
45#define MagickAbsoluteValue(x) ((x) < 0 ? -(x) : (x))
46#define MAGICK_INT_MAX (INT_MAX)
47#define MagickPHI 1.61803398874989484820458683436563811772030917980576
48#define MagickPI2 1.57079632679489661923132169163975144209858469968755
49#define MagickPI 3.1415926535897932384626433832795028841971693993751058209749445923078164062
50#define MAGICK_PTRDIFF_MAX (PTRDIFF_MAX)
51#define MAGICK_PTRDIFF_MIN (-PTRDIFF_MAX-1)
52#define MagickSQ1_2 0.70710678118654752440084436210484903928483593768847
53#define MagickSQ2 1.41421356237309504880168872420969807856967187537695
54#define MagickSQ2PI 2.50662827463100024161235523934010416269302368164062
55#define MAGICK_SIZE_MAX (SIZE_MAX)
56#define MAGICK_SSIZE_MAX (SSIZE_MAX)
57#define MAGICK_SSIZE_MIN (-SSIZE_MAX-1)
58#define MAGICK_UCHAR_MAX (UCHAR_MAX)
59#define MAGICK_UINT_MAX (UINT_MAX)
60#define MAGICK_ULONG_MAX (ULONG_MAX)
61#define MAGICK_USHORT_MAX (USHRT_MAX)
62#define MatteColor "#bdbdbd" /* gray */
63#define MatteColorRGBA ScaleShortToQuantum(0xbdbd),\
64 ScaleShortToQuantum(0xbdbd),ScaleShortToQuantum(0xbdbd),OpaqueAlpha
65#define PSDensityGeometry "72.0x72.0"
66#define PSPageGeometry "612x792"
67#define SaveImagesTag "Save/Images"
68#define SaveImageTag "Save/Image"
69#define TransparentColor "#00000000" /* transparent black */
70#define TransparentColorRGBA (Quantum) 0,(Quantum) 0,(Quantum) 0,TransparentAlpha
71#define UndefinedCompressionQuality 0UL
72#define UndefinedTicksPerSecond 100L
73
74static inline int CastDoubleToInt(const double x)
75{
76 double
77 value;
78
79 if (IsNaN(x) != 0)
80 {
81 errno=ERANGE;
82 return(0);
83 }
84 value=(x < 0.0) ? ceil(x) : floor(x);
85 if (value < 0.0)
86 {
87 errno=ERANGE;
88 return(0);
89 }
90 if (value >= ((double) MAGICK_INT_MAX))
91 {
92 errno=ERANGE;
93 return(MAGICK_INT_MAX);
94 }
95 return((int) value);
96}
97
98static inline ptrdiff_t CastDoubleToPtrdiffT(const double x)
99{
100 double
101 value;
102
103 if (IsNaN(x) != 0)
104 {
105 errno=ERANGE;
106 return(0);
107 }
108 value=(x < 0.0) ? ceil(x) : floor(x);
109 if (value < ((double) MAGICK_PTRDIFF_MIN))
110 {
111 errno=ERANGE;
112 return(MAGICK_PTRDIFF_MIN);
113 }
114 if (value >= ((double) MAGICK_PTRDIFF_MAX))
115 {
116 errno=ERANGE;
117 return(MAGICK_PTRDIFF_MAX);
118 }
119 return((ptrdiff_t) value);
120}
121
122static inline QuantumAny CastDoubleToQuantumAny(const double x)
123{
124 double
125 value;
126
127 if (IsNaN(x) != 0)
128 {
129 errno=ERANGE;
130 return(0);
131 }
132 value=(x < 0.0) ? ceil(x) : floor(x);
133 if (value < 0.0)
134 {
135 errno=ERANGE;
136 return(0);
137 }
138 if (value >= ((double) ((QuantumAny) ~0)))
139 {
140 errno=ERANGE;
141 return((QuantumAny) ~0);
142 }
143 return((QuantumAny) value);
144}
145
146static inline size_t CastDoubleToSizeT(const double x)
147{
148 double
149 value;
150
151 if (IsNaN(x) != 0)
152 {
153 errno=ERANGE;
154 return(0);
155 }
156 value=(x < 0.0) ? ceil(x) : floor(x);
157 if (value < 0.0)
158 {
159 errno=ERANGE;
160 return(0);
161 }
162 if (value >= ((double) MAGICK_SIZE_MAX))
163 {
164 errno=ERANGE;
165 return(MAGICK_SIZE_MAX);
166 }
167 return((size_t) value);
168}
169
170static inline ssize_t CastDoubleToSsizeT(const double x)
171{
172 double
173 value;
174
175 if (IsNaN(x) != 0)
176 {
177 errno=ERANGE;
178 return(0);
179 }
180 value=(x < 0.0) ? ceil(x) : floor(x);
181 if (value < ((double) MAGICK_SSIZE_MIN))
182 {
183 errno=ERANGE;
184 return(MAGICK_SSIZE_MIN);
185 }
186 if (value >= ((double) MAGICK_SSIZE_MAX))
187 {
188 errno=ERANGE;
189 return(MAGICK_SSIZE_MAX);
190 }
191 return((ssize_t) value);
192}
193
194static inline unsigned char CastDoubleToUChar(const double x)
195{
196 double
197 value;
198
199 if (IsNaN(x) != 0)
200 {
201 errno=ERANGE;
202 return(0);
203 }
204 value=(x < 0.0) ? ceil(x) : floor(x);
205 if (value < 0.0)
206 {
207 errno=ERANGE;
208 return(0);
209 }
210 if (value >= ((double) MAGICK_UCHAR_MAX))
211 {
212 errno=ERANGE;
213 return(MAGICK_UCHAR_MAX);
214 }
215 return((unsigned char) value);
216}
217
218static inline unsigned int CastDoubleToUInt(const double x)
219{
220 double
221 value;
222
223 if (IsNaN(x) != 0)
224 {
225 errno=ERANGE;
226 return(0);
227 }
228 value=(x < 0.0) ? ceil(x) : floor(x);
229 if (value < 0.0)
230 {
231 errno=ERANGE;
232 return(0);
233 }
234 if (value >= ((double) MAGICK_UINT_MAX))
235 {
236 errno=ERANGE;
237 return(MAGICK_UINT_MAX);
238 }
239 return((unsigned int) value);
240}
241
242static inline unsigned short CastDoubleToUShort(const double x)
243{
244 double
245 value;
246
247 if (IsNaN(x) != 0)
248 {
249 errno=ERANGE;
250 return(0);
251 }
252 value=(x < 0.0) ? ceil(x) : floor(x);
253 if (value < 0.0)
254 {
255 errno=ERANGE;
256 return(0);
257 }
258 if (value >= ((double) MAGICK_USHORT_MAX))
259 {
260 errno=ERANGE;
261 return(MAGICK_USHORT_MAX);
262 }
263 return((unsigned short) value);
264}
265
266static inline double DegreesToRadians(const double degrees)
267{
268 return((double) (MagickPI*degrees/180.0));
269}
270
271static inline size_t GetImageChannels(const Image *image)
272{
273 ssize_t
274 i;
275
276 size_t
277 channels;
278
279 channels=0;
280 for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
281 {
282 PixelChannel channel = GetPixelChannelChannel(image,i);
283 PixelTrait traits = GetPixelChannelTraits(image,channel);
284 if ((traits & UpdatePixelTrait) != 0)
285 channels++;
286 }
287 return(channels == 0 ? (size_t) 1 : channels);
288}
289
290static inline double RadiansToDegrees(const double radians)
291{
292 return((double) (180.0*radians/MagickPI));
293}
294
295static inline unsigned char ScaleColor5to8(const unsigned int color)
296{
297 return((unsigned char) (((color) << 3) | ((color) >> 2)));
298}
299
300static inline unsigned char ScaleColor6to8(const unsigned int color)
301{
302 return((unsigned char) (((color) << 2) | ((color) >> 4)));
303}
304
305static inline unsigned int ScaleColor8to5(const unsigned char color)
306{
307 return((unsigned int) (((color) & ~0x07) >> 3));
308}
309
310static inline unsigned int ScaleColor8to6(const unsigned char color)
311{
312 return((unsigned int) (((color) & ~0x03) >> 2));
313}
314
315#if defined(__cplusplus) || defined(c_plusplus)
316}
317#endif
318
319#endif