]> granicus.if.org Git - imagemagick/blob - wand/mogrify-private.h
(no commit message)
[imagemagick] / wand / mogrify-private.h
1 /*
2   Copyright 1999-2010 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.
6   obtain a copy of the License at
7
8     http://www.imagemagick.org/script/license.php
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   MagickWand mogrify command-line private methods.
17 */
18 #ifndef _MAGICKWAND_MOGRIFY_PRIVATE_H
19 #define _MAGICKWAND_MOGRIFY_PRIVATE_H
20
21 #if defined(__cplusplus) || defined(c_plusplus)
22 extern "C" {
23 #endif
24
25 #define AppendImageStack(images) \
26 { \
27   (void) SyncImagesSettings(image_info,images); \
28   AppendImageToList(&image_stack[k].image,images); \
29   image=image_stack[k].image; \
30 }
31 #define DegreesToRadians(x)  (MagickPI*(x)/180.0)
32 #define DestroyImageStack() \
33 { \
34   while (k > 0) \
35     PopImageStack(); \
36   image_stack[k].image=DestroyImageList(image_stack[k].image); \
37   image_stack[k].image_info=DestroyImageInfo(image_stack[k].image_info); \
38 }
39 #define FinalizeImageSettings(image_info,image,advance) \
40 { \
41   FireImageStack(MagickTrue,advance,MagickTrue); \
42   if (image != (Image *) NULL) \
43     { \
44       InheritException(exception,&(image)->exception); \
45       (void) SyncImagesSettings(image_info,image); \
46     } \
47 }
48 #define FireImageStack(postfix,advance,fire) \
49   if ((j <= i) && (i < (ssize_t) argc)) \
50     { \
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); \
54       else \
55         if ((fire) != MagickFalse) \
56           { \
57             status&=MogrifyImages(image_stack[k].image_info,postfix,(int) \
58               (i-j+1),(const char **) (argv+j),&image_stack[k].image, \
59               exception); \
60             image=image_stack[k].image; \
61             if ((advance) != MagickFalse) \
62               j=i+1; \
63             pend=MagickFalse; \
64           } \
65     }
66 #define MagickPI  3.14159265358979323846264338327950288419716939937510
67 #define MaxImageStackDepth  32
68 #define NewImageStack() \
69 { \
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; \
74 }
75 #define PushImageStack() \
76 { \
77   k++; \
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; \
82 }
83 #define PopImageStack() \
84 { \
85   if (respect_parenthesis == MagickFalse) \
86     { \
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); \
89     } \
90   image_stack[k].image_info=DestroyImageInfo(image_stack[k].image_info); \
91   AppendImageToList(&image_stack[k-1].image,image_stack[k].image); \
92   k--; \
93   image_info=image_stack[k].image_info; \
94   image=image_stack[k].image; \
95 }
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) \
102 { \
103   images=RemoveFirstImageFromList(&image_stack[k].image); \
104   image=image_stack[k].image; \
105 }
106 #define RemoveAllImageStack() \
107 { \
108   if (image_stack[k].image != (Image *) NULL) \
109     image_stack[k].image=DestroyImageList(image_stack[k].image); \
110 }
111 #define SetImageStack(image) \
112 { \
113   image_stack[k].image=(image); \
114 }
115
116 typedef struct _ImageStack
117 {
118   ImageInfo
119     *image_info;
120
121   Image
122     *image;
123 } ImageStack;
124
125 static MagickBooleanType
126   respect_parenthesis = MagickFalse;
127
128 static inline MagickRealType MagickPixelIntensity(
129   const MagickPixelPacket *pixel)
130 {
131   MagickRealType
132     intensity;
133
134   intensity=0.299*pixel->red+0.587*pixel->green+0.114*pixel->blue;
135   return(intensity);
136 }
137
138 static inline Quantum MagickPixelIntensityToQuantum(
139   const MagickPixelPacket *pixel)
140 {
141   MagickRealType
142     intensity;
143
144   intensity=0.299*pixel->red+0.587*pixel->green+0.114*pixel->blue;
145   return((Quantum) (intensity+0.5));
146 }
147
148 static inline MagickRealType PixelIntensity(const PixelPacket *pixel)
149 {
150   MagickRealType
151     intensity;
152
153   intensity=(MagickRealType) (0.299*pixel->red+0.587*pixel->green+
154     0.114*pixel->blue);
155   return(intensity);
156 }
157
158 static inline Quantum PixelIntensityToQuantum(const PixelPacket *pixel)
159 {
160   MagickRealType
161     intensity;
162
163   intensity=(MagickRealType) (0.299*pixel->red+0.587*pixel->green+
164     0.114*pixel->blue);
165 #if !defined(MAGICKCORE_HDRI_SUPPORT)
166   return((Quantum) (intensity+0.5));
167 #else
168   return((Quantum) intensity);
169 #endif
170 }
171
172 static inline void SetMagickPixelPacket(const Image *image,
173   const PixelPacket *color,const IndexPacket *index,MagickPixelPacket *pixel)
174 {
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;
184 }
185
186 #if defined(__cplusplus) || defined(c_plusplus)
187 }
188 #endif
189
190 #endif