18#ifndef MAGICKCORE_IMAGE_PRIVATE_H
19#define MAGICKCORE_IMAGE_PRIVATE_H
21#if defined(__cplusplus) || defined(c_plusplus)
25#define MagickMax(x,y) (((x) > (y)) ? (x) : (y))
26#define MagickMin(x,y) (((x) < (y)) ? (x) : (y))
28#include "MagickCore/pixel-accessor.h"
29#include "MagickCore/quantum-private.h"
31#define BackgroundColor "#ffffff"
32#define BackgroundColorRGBA QuantumRange,QuantumRange,QuantumRange,OpaqueAlpha
33#define BorderColor "#dfdfdf"
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"
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"
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"
70#define TransparentColorRGBA (Quantum) 0,(Quantum) 0,(Quantum) 0,TransparentAlpha
71#define UndefinedCompressionQuality 0UL
72#define UndefinedTicksPerSecond 100L
74static inline int CastDoubleToInt(
const double x)
84 value=(x < 0.0) ? ceil(x) : floor(x);
90 if (value >= ((
double) MAGICK_INT_MAX))
93 return(MAGICK_INT_MAX);
98static inline ptrdiff_t CastDoubleToPtrdiffT(
const double x)
108 value=(x < 0.0) ? ceil(x) : floor(x);
109 if (value < ((
double) MAGICK_PTRDIFF_MIN))
112 return(MAGICK_PTRDIFF_MIN);
114 if (value >= ((
double) MAGICK_PTRDIFF_MAX))
117 return(MAGICK_PTRDIFF_MAX);
119 return((ptrdiff_t) value);
122static inline QuantumAny CastDoubleToQuantumAny(
const double x)
132 value=(x < 0.0) ? ceil(x) : floor(x);
138 if (value >= ((
double) ((QuantumAny) ~0)))
141 return((QuantumAny) ~0);
143 return((QuantumAny) value);
146static inline size_t CastDoubleToSizeT(
const double x)
156 value=(x < 0.0) ? ceil(x) : floor(x);
162 if (value >= ((
double) MAGICK_SIZE_MAX))
165 return(MAGICK_SIZE_MAX);
167 return((
size_t) value);
170static inline ssize_t CastDoubleToSsizeT(
const double x)
180 value=(x < 0.0) ? ceil(x) : floor(x);
181 if (value < ((
double) MAGICK_SSIZE_MIN))
184 return(MAGICK_SSIZE_MIN);
186 if (value >= ((
double) MAGICK_SSIZE_MAX))
189 return(MAGICK_SSIZE_MAX);
191 return((ssize_t) value);
194static inline unsigned char CastDoubleToUChar(
const double x)
204 value=(x < 0.0) ? ceil(x) : floor(x);
210 if (value >= ((
double) MAGICK_UCHAR_MAX))
213 return(MAGICK_UCHAR_MAX);
215 return((
unsigned char) value);
218static inline unsigned int CastDoubleToUInt(
const double x)
228 value=(x < 0.0) ? ceil(x) : floor(x);
234 if (value >= ((
double) MAGICK_UINT_MAX))
237 return(MAGICK_UINT_MAX);
239 return((
unsigned int) value);
242static inline unsigned short CastDoubleToUShort(
const double x)
252 value=(x < 0.0) ? ceil(x) : floor(x);
258 if (value >= ((
double) MAGICK_USHORT_MAX))
261 return(MAGICK_USHORT_MAX);
263 return((
unsigned short) value);
266static inline double DegreesToRadians(
const double degrees)
268 return((
double) (MagickPI*degrees/180.0));
271static inline size_t GetImageChannels(
const Image *image)
280 for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
282 PixelChannel channel = GetPixelChannelChannel(image,i);
283 PixelTrait traits = GetPixelChannelTraits(image,channel);
284 if ((traits & UpdatePixelTrait) != 0)
287 return(channels == 0 ? (
size_t) 1 : channels);
290static inline double RadiansToDegrees(
const double radians)
292 return((
double) (180.0*radians/MagickPI));
295static inline unsigned char ScaleColor5to8(
const unsigned int color)
297 return((
unsigned char) (((color) << 3) | ((color) >> 2)));
300static inline unsigned char ScaleColor6to8(
const unsigned int color)
302 return((
unsigned char) (((color) << 2) | ((color) >> 4)));
305static inline unsigned int ScaleColor8to5(
const unsigned char color)
307 return((
unsigned int) (((color) & ~0x07) >> 3));
310static inline unsigned int ScaleColor8to6(
const unsigned char color)
312 return((
unsigned int) (((color) & ~0x03) >> 2));
315#if defined(__cplusplus) || defined(c_plusplus)