mogrify-private.h
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef _MAGICKWAND_MOGRIFY_PRIVATE_H
00019 #define _MAGICKWAND_MOGRIFY_PRIVATE_H
00020
00021 #if defined(__cplusplus) || defined(c_plusplus)
00022 extern "C" {
00023 #endif
00024
00025 #define AppendImageStack(images) \
00026 { \
00027 (void) SyncImagesSettings(image_info,images); \
00028 AppendImageToList(&image_stack[k].image,images); \
00029 image=image_stack[k].image; \
00030 }
00031 #define DegreesToRadians(x) (MagickPI*(x)/180.0)
00032 #define DestroyImageStack() \
00033 { \
00034 while (k > 0) \
00035 PopImageStack(); \
00036 image_stack[k].image=DestroyImageList(image_stack[k].image); \
00037 image_stack[k].image_info=DestroyImageInfo(image_stack[k].image_info); \
00038 }
00039 #define FinalizeImageSettings(image_info,image,advance) \
00040 { \
00041 ResetImageOptions(image_info); \
00042 FireImageStack(MagickTrue,advance,MagickTrue); \
00043 if (image != (Image *) NULL) \
00044 { \
00045 InheritException(exception,&(image)->exception); \
00046 (void) SyncImagesSettings(image_info,image); \
00047 } \
00048 }
00049 #define FireImageStack(postfix,advance,fire) \
00050 if ((j <= i) && (i < argc)) \
00051 { \
00052 if (image_stack[k].image == (Image *) NULL) \
00053 status&=MogrifyImageInfo(image_stack[k].image_info,(int) (i-j+1), \
00054 (const char **) (argv+j),exception); \
00055 else \
00056 if ((fire) != MagickFalse) \
00057 { \
00058 status&=MogrifyImages(image_stack[k].image_info,postfix,(int) \
00059 (i-j+1),(const char **) (argv+j),&image_stack[k].image, \
00060 exception); \
00061 image=image_stack[k].image; \
00062 if ((advance) != MagickFalse) \
00063 j=i+1; \
00064 pend=MagickFalse; \
00065 } \
00066 }
00067 #define MagickPI 3.14159265358979323846264338327950288419716939937510
00068 #define MaxImageStackDepth 32
00069 #define NewImageStack() \
00070 { \
00071 image_stack[0].image_info=CloneImageInfo(image_info); \
00072 image_stack[0].image=NewImageList(); \
00073 image_info=image_stack[0].image_info; \
00074 image=image_stack[0].image; \
00075 }
00076 #define PushImageStack() \
00077 { \
00078 k++; \
00079 image_stack[k].image_info=CloneImageInfo(image_stack[k-1].image_info); \
00080 image_stack[k].image=NewImageList(); \
00081 image_info=image_stack[k].image_info; \
00082 image=image_stack[k].image; \
00083 }
00084 #define PopImageStack() \
00085 { \
00086 if (respect_parenthesis == MagickFalse) \
00087 { \
00088 image_stack[k-1].image_info=DestroyImageInfo(image_stack[k-1].image_info); \
00089 image_stack[k-1].image_info=CloneImageInfo(image_stack[k].image_info); \
00090 } \
00091 image_stack[k].image_info=DestroyImageInfo(image_stack[k].image_info); \
00092 AppendImageToList(&image_stack[k-1].image,image_stack[k].image); \
00093 k--; \
00094 image_info=image_stack[k].image_info; \
00095 image=image_stack[k].image; \
00096 }
00097 #define QuantumScale ((MagickRealType) 1.0/(MagickRealType) QuantumRange)
00098 #define QuantumTick(i,span) ((MagickBooleanType) ((((i) & ((i)-1)) == 0) || \
00099 (((i) & 0xfff) == 0) || \
00100 ((MagickOffsetType) (i) == ((MagickOffsetType) (span)-1))))
00101 #define RadiansToDegrees(x) (180.0*(x)/MagickPI)
00102 #define RemoveImageStack(images) \
00103 { \
00104 images=RemoveFirstImageFromList(&image_stack[k].image); \
00105 image=image_stack[k].image; \
00106 }
00107 #define RemoveAllImageStack() \
00108 { \
00109 if (image_stack[k].image != (Image *) NULL) \
00110 image_stack[k].image=DestroyImageList(image_stack[k].image); \
00111 }
00112 #define SetImageStack(image) \
00113 { \
00114 image_stack[k].image=(image); \
00115 }
00116
00117 typedef struct _ImageStack
00118 {
00119 ImageInfo
00120 *image_info;
00121
00122 Image
00123 *image;
00124 } ImageStack;
00125
00126 static MagickBooleanType
00127 respect_parenthesis = MagickFalse;
00128
00129 static inline MagickRealType MagickPixelIntensity(
00130 const MagickPixelPacket *pixel)
00131 {
00132 MagickRealType
00133 intensity;
00134
00135 intensity=0.299*pixel->red+0.587*pixel->green+0.114*pixel->blue;
00136 return(intensity);
00137 }
00138
00139 static inline Quantum MagickPixelIntensityToQuantum(
00140 const MagickPixelPacket *pixel)
00141 {
00142 MagickRealType
00143 intensity;
00144
00145 intensity=0.299*pixel->red+0.587*pixel->green+0.114*pixel->blue;
00146 return((Quantum) (intensity+0.5));
00147 }
00148
00149 static inline MagickRealType PixelIntensity(const PixelPacket *pixel)
00150 {
00151 MagickRealType
00152 intensity;
00153
00154 intensity=(MagickRealType) (0.299*pixel->red+0.587*pixel->green+
00155 0.114*pixel->blue);
00156 return(intensity);
00157 }
00158
00159 static inline Quantum PixelIntensityToQuantum(const PixelPacket *pixel)
00160 {
00161 MagickRealType
00162 intensity;
00163
00164 intensity=(MagickRealType) (0.299*pixel->red+0.587*pixel->green+
00165 0.114*pixel->blue);
00166 #if !defined(MAGICKCORE_HDRI_SUPPORT)
00167 return((Quantum) (intensity+0.5));
00168 #else
00169 return((Quantum) intensity);
00170 #endif
00171 }
00172
00173 static inline void SetMagickPixelPacket(const Image *image,
00174 const PixelPacket *color,const IndexPacket *index,MagickPixelPacket *pixel)
00175 {
00176 pixel->red=(MagickRealType) color->red;
00177 pixel->green=(MagickRealType) color->green;
00178 pixel->blue=(MagickRealType) color->blue;
00179 if (image->matte != MagickFalse)
00180 pixel->opacity=(MagickRealType) color->opacity;
00181 if (((image->colorspace == CMYKColorspace) ||
00182 (image->storage_class == PseudoClass)) &&
00183 (index != (const IndexPacket *) NULL))
00184 pixel->index=(MagickRealType) *index;
00185 }
00186
00187 #if defined(__cplusplus) || defined(c_plusplus)
00188 }
00189 #endif
00190
00191 #endif