mogrify-private.h

Go to the documentation of this file.
00001 /*
00002   Copyright 1999-2008 ImageMagick Studio LLC, a non-profit organization
00003   dedicated to making software imaging solutions freely available.
00004 
00005   You may not use this file except in compliance with the License.
00006   obtain a copy of the License at
00007 
00008     http://www.imagemagick.org/script/license.php
00009 
00010   Unless required by applicable law or agreed to in writing, software
00011   distributed under the License is distributed on an "AS IS" BASIS,
00012   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
00013   See the License for the specific language governing permissions and
00014   limitations under the License.
00015 
00016   MagickWand mogrify command-line private methods.
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

Generated on Sat Nov 22 23:45:25 2008 for MagickWand by  doxygen 1.5.7.1