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