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