2 Copyright 1999-2010 ImageMagick Studio LLC, a non-profit organization
3 dedicated to making software imaging solutions freely available.
5 You may not use this file except in compliance with the License.
6 obtain a copy of the License at
8 http://www.imagemagick.org/script/license.php
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.
16 MagickWand mogrify command-line private methods.
18 #ifndef _MAGICKWAND_MOGRIFY_PRIVATE_H
19 #define _MAGICKWAND_MOGRIFY_PRIVATE_H
21 #if defined(__cplusplus) || defined(c_plusplus)
25 #define AppendImageStack(images) \
27 (void) SyncImagesSettings(image_info,images); \
28 AppendImageToList(&image_stack[k].image,images); \
29 image=image_stack[k].image; \
31 #define DegreesToRadians(x) (MagickPI*(x)/180.0)
32 #define DestroyImageStack() \
36 image_stack[k].image=DestroyImageList(image_stack[k].image); \
37 image_stack[k].image_info=DestroyImageInfo(image_stack[k].image_info); \
39 #define FinalizeImageSettings(image_info,image,advance) \
41 FireImageStack(MagickTrue,advance,MagickTrue); \
42 if (image != (Image *) NULL) \
44 InheritException(exception,&(image)->exception); \
45 (void) SyncImagesSettings(image_info,image); \
48 #define FireImageStack(postfix,advance,fire) \
49 if ((j <= i) && (i < (ssize_t) argc)) \
51 if (image_stack[k].image == (Image *) NULL) \
52 status&=MogrifyImageInfo(image_stack[k].image_info,(int) (i-j+1), \
53 (const char **) (argv+j),exception); \
55 if ((fire) != MagickFalse) \
57 status&=MogrifyImages(image_stack[k].image_info,postfix,(int) \
58 (i-j+1),(const char **) (argv+j),&image_stack[k].image, \
60 image=image_stack[k].image; \
61 if ((advance) != MagickFalse) \
66 #define MagickPI 3.14159265358979323846264338327950288419716939937510
67 #define MaxImageStackDepth 32
68 #define NewImageStack() \
70 image_stack[0].image_info=CloneImageInfo(image_info); \
71 image_stack[0].image=NewImageList(); \
72 image_info=image_stack[0].image_info; \
73 image=image_stack[0].image; \
75 #define PushImageStack() \
78 image_stack[k].image_info=CloneImageInfo(image_stack[k-1].image_info); \
79 image_stack[k].image=NewImageList(); \
80 image_info=image_stack[k].image_info; \
81 image=image_stack[k].image; \
83 #define PopImageStack() \
85 if (respect_parenthesis == MagickFalse) \
87 image_stack[k-1].image_info=DestroyImageInfo(image_stack[k-1].image_info); \
88 image_stack[k-1].image_info=CloneImageInfo(image_stack[k].image_info); \
90 image_stack[k].image_info=DestroyImageInfo(image_stack[k].image_info); \
91 AppendImageToList(&image_stack[k-1].image,image_stack[k].image); \
93 image_info=image_stack[k].image_info; \
94 image=image_stack[k].image; \
96 #define QuantumScale ((MagickRealType) 1.0/(MagickRealType) QuantumRange)
97 #define QuantumTick(i,span) ((MagickBooleanType) ((((i) & ((i)-1)) == 0) || \
98 (((i) & 0xfff) == 0) || \
99 ((MagickOffsetType) (i) == ((MagickOffsetType) (span)-1))))
100 #define RadiansToDegrees(x) (180.0*(x)/MagickPI)
101 #define RemoveImageStack(images) \
103 images=RemoveFirstImageFromList(&image_stack[k].image); \
104 image=image_stack[k].image; \
106 #define RemoveAllImageStack() \
108 if (image_stack[k].image != (Image *) NULL) \
109 image_stack[k].image=DestroyImageList(image_stack[k].image); \
111 #define SetImageStack(image) \
113 image_stack[k].image=(image); \
116 typedef struct _ImageStack
125 static MagickBooleanType
126 respect_parenthesis = MagickFalse;
128 static inline MagickRealType MagickPixelIntensity(
129 const MagickPixelPacket *pixel)
134 intensity=0.299*pixel->red+0.587*pixel->green+0.114*pixel->blue;
138 static inline Quantum MagickPixelIntensityToQuantum(
139 const MagickPixelPacket *pixel)
144 intensity=0.299*pixel->red+0.587*pixel->green+0.114*pixel->blue;
145 return((Quantum) (intensity+0.5));
148 static inline MagickRealType PixelIntensity(const PixelPacket *pixel)
153 intensity=(MagickRealType) (0.299*pixel->red+0.587*pixel->green+
158 static inline Quantum PixelIntensityToQuantum(const PixelPacket *pixel)
163 intensity=(MagickRealType) (0.299*pixel->red+0.587*pixel->green+
165 #if !defined(MAGICKCORE_HDRI_SUPPORT)
166 return((Quantum) (intensity+0.5));
168 return((Quantum) intensity);
172 static inline void SetMagickPixelPacket(const Image *image,
173 const PixelPacket *color,const IndexPacket *index,MagickPixelPacket *pixel)
175 pixel->red=(MagickRealType) color->red;
176 pixel->green=(MagickRealType) color->green;
177 pixel->blue=(MagickRealType) color->blue;
178 if (image->matte != MagickFalse)
179 pixel->opacity=(MagickRealType) color->opacity;
180 if (((image->colorspace == CMYKColorspace) ||
181 (image->storage_class == PseudoClass)) &&
182 (index != (const IndexPacket *) NULL))
183 pixel->index=(MagickRealType) *index;
186 #if defined(__cplusplus) || defined(c_plusplus)