MagickCore  6.9.13-47
Convert, Edit, Or Compose Bitmap Images
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)
28 extern "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 
63 static 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 
87 static 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 
111 static 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 
135 static 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 
159 static 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 
183 static 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 
207 static 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 
231 static 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 
255 static inline double DegreesToRadians(const double degrees)
256 {
257  return((double) (MagickPI*degrees/180.0));
258 }
259 
260 static inline MagickRealType RadiansToDegrees(const MagickRealType radians)
261 {
262  return((MagickRealType) (180.0*radians/MagickPI));
263 }
264 
265 static inline unsigned char ScaleColor5to8(const unsigned int color)
266 {
267  return((unsigned char) (((color) << 3) | ((color) >> 2)));
268 }
269 
270 static inline unsigned char ScaleColor6to8(const unsigned int color)
271 {
272  return((unsigned char) (((color) << 2) | ((color) >> 4)));
273 }
274 
275 static inline unsigned int ScaleColor8to5(const unsigned char color)
276 {
277  return((unsigned int) (((color) & ~0x07) >> 3));
278 }
279 
280 static 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