| /* | 
 |   Copyright 1999-2015 ImageMagick Studio LLC, a non-profit organization | 
 |   dedicated to making software imaging solutions freely available. | 
 |  | 
 |   You may not use this file except in compliance with the License. | 
 |   obtain a copy of the License at | 
 |  | 
 |     http://www.imagemagick.org/script/license.php | 
 |  | 
 |   Unless required by applicable law or agreed to in writing, software | 
 |   distributed under the License is distributed on an "AS IS" BASIS, | 
 |   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
 |   See the License for the specific language governing permissions and | 
 |   limitations under the License. | 
 |  | 
 |   MagickCore image pixel methods. | 
 | */ | 
 | #ifndef _MAGICKCORE_PIXEL_H | 
 | #define _MAGICKCORE_PIXEL_H | 
 |  | 
 | #include "MagickCore/colorspace.h" | 
 |  | 
 | #if defined(__cplusplus) || defined(c_plusplus) | 
 | extern "C" { | 
 | #endif | 
 |  | 
 | #define MaxPixelChannels  32 | 
 | #undef index | 
 |  | 
 | /* | 
 |   Pixel enum declarations. | 
 | */ | 
 | typedef enum | 
 | { | 
 |   UndefinedChannel = 0x0000, | 
 |   RedChannel = 0x0001, | 
 |   GrayChannel = 0x0001, | 
 |   CyanChannel = 0x0001, | 
 |   GreenChannel = 0x0002, | 
 |   MagentaChannel = 0x0002, | 
 |   BlueChannel = 0x0004, | 
 |   YellowChannel = 0x0004, | 
 |   BlackChannel = 0x0008, | 
 |   AlphaChannel = 0x0010, | 
 |   OpacityChannel = 0x0010, | 
 |   IndexChannel = 0x0020,             /* Color Index Table? */ | 
 |   ReadMaskChannel = 0x0040,          /* Pixel is Not Readable? */ | 
 |   WriteMaskChannel = 0x0080,         /* Pixel is Write Protected? */ | 
 |   MetaChannel = 0x0100,              /* ???? */ | 
 |   CompositeChannels = 0x002F, | 
 |   AllChannels = 0x7ffffff, | 
 |   /* | 
 |     Special purpose channel types. | 
 |     FUTURE: are these needed any more - they are more like hacks | 
 |     SyncChannels for example is NOT a real channel but a 'flag' | 
 |     It really says -- "User has not defined channels" | 
 |     Though it does have extra meaning in the "-auto-level" operator | 
 |   */ | 
 |   TrueAlphaChannel = 0x0100, /* extract actual alpha channel from opacity */ | 
 |   RGBChannels = 0x0200,      /* set alpha from grayscale mask in RGB */ | 
 |   GrayChannels = 0x0400, | 
 |   SyncChannels = 0x20000,    /* channels modified as a single unit */ | 
 |   DefaultChannels = AllChannels | 
 | } ChannelType;  /* must correspond to PixelChannel */ | 
 |  | 
 | typedef enum | 
 | { | 
 |   UndefinedPixelChannel = 0, | 
 |   RedPixelChannel = 0, | 
 |   CyanPixelChannel = 0, | 
 |   GrayPixelChannel = 0, | 
 |   LPixelChannel = 0, | 
 |   YPixelChannel = 0, | 
 |   aPixelChannel = 1, | 
 |   GreenPixelChannel = 1, | 
 |   MagentaPixelChannel = 1, | 
 |   CbPixelChannel = 1, | 
 |   bPixelChannel = 2, | 
 |   BluePixelChannel = 2, | 
 |   YellowPixelChannel = 2, | 
 |   CrPixelChannel = 2, | 
 |   BlackPixelChannel = 3, | 
 |   AlphaPixelChannel = 4, | 
 |   IndexPixelChannel = 5, | 
 |   ReadMaskPixelChannel = 6, | 
 |   WriteMaskPixelChannel = 7, | 
 |   MetaPixelChannel = 8, | 
 |   IntensityPixelChannel = MaxPixelChannels,  /* ???? */ | 
 |   CompositePixelChannel = MaxPixelChannels,  /* ???? */ | 
 |   SyncPixelChannel = MaxPixelChannels+1      /* not a real channel */ | 
 | } PixelChannel;  /* must correspond to ChannelType */ | 
 |  | 
 | typedef enum | 
 | { | 
 |   UndefinedPixelIntensityMethod = 0, | 
 |   AveragePixelIntensityMethod, | 
 |   BrightnessPixelIntensityMethod, | 
 |   LightnessPixelIntensityMethod, | 
 |   MSPixelIntensityMethod, | 
 |   Rec601LumaPixelIntensityMethod, | 
 |   Rec601LuminancePixelIntensityMethod, | 
 |   Rec709LumaPixelIntensityMethod, | 
 |   Rec709LuminancePixelIntensityMethod, | 
 |   RMSPixelIntensityMethod | 
 | } PixelIntensityMethod; | 
 |  | 
 | typedef enum | 
 | { | 
 |   UndefinedInterpolatePixel, | 
 |   AverageInterpolatePixel,    /* Average 4 nearest neighbours */ | 
 |   Average9InterpolatePixel,   /* Average 9 nearest neighbours */ | 
 |   Average16InterpolatePixel,  /* Average 16 nearest neighbours */ | 
 |   BackgroundInterpolatePixel, /* Just return background color */ | 
 |   BilinearInterpolatePixel,   /* Triangular filter interpolation */ | 
 |   BlendInterpolatePixel,      /* blend of nearest 1, 2 or 4 pixels */ | 
 |   CatromInterpolatePixel,     /* Catmull-Rom interpolation */ | 
 |   IntegerInterpolatePixel,    /* Integer (floor) interpolation */ | 
 |   MeshInterpolatePixel,       /* Triangular Mesh interpolation */ | 
 |   NearestInterpolatePixel,    /* Nearest Neighbour Only */ | 
 |   SplineInterpolatePixel      /* Cubic Spline (blurred) interpolation */ | 
 |   /* FilterInterpolatePixel,  ** Use resize filter - (very slow) */ | 
 | } PixelInterpolateMethod; | 
 |  | 
 | typedef enum | 
 | { | 
 |   UndefinedPixelMask = 0x000000, | 
 |   ReadPixelMask = 0x000001, | 
 |   WritePixelMask = 0x000002 | 
 | } PixelMask; | 
 |  | 
 | typedef enum | 
 | { | 
 |   UndefinedPixelTrait = 0x000000, | 
 |   CopyPixelTrait = 0x000001, | 
 |   UpdatePixelTrait = 0x000002, | 
 |   BlendPixelTrait = 0x000004 | 
 | } PixelTrait; | 
 |  | 
 | typedef enum | 
 | { | 
 |   UndefinedPixel, | 
 |   CharPixel, | 
 |   DoublePixel, | 
 |   FloatPixel, | 
 |   LongPixel, | 
 |   LongLongPixel, | 
 |   QuantumPixel, | 
 |   ShortPixel | 
 | } StorageType; | 
 |  | 
 | /* | 
 |   Pixel typedef declarations. | 
 | */ | 
 | typedef struct _PixelChannelMap | 
 | { | 
 |   PixelChannel | 
 |     channel; | 
 |  | 
 |   PixelTrait | 
 |     traits; | 
 |  | 
 |   ssize_t | 
 |     offset; | 
 | } PixelChannelMap; | 
 |  | 
 | typedef struct _PixelInfo | 
 | { | 
 |   ClassType | 
 |     storage_class; | 
 |  | 
 |   ColorspaceType | 
 |     colorspace; | 
 |  | 
 |   PixelTrait | 
 |     alpha_trait; | 
 |  | 
 |   double | 
 |     fuzz; | 
 |  | 
 |   size_t | 
 |     depth; | 
 |  | 
 |   MagickSizeType | 
 |     count; | 
 |  | 
 |   MagickRealType | 
 |     red, | 
 |     green, | 
 |     blue, | 
 |     black, | 
 |     alpha, | 
 |     index; | 
 | } PixelInfo; | 
 |  | 
 | typedef struct _PixelPacket | 
 | { | 
 |   unsigned int | 
 |     red, | 
 |     green, | 
 |     blue, | 
 |     alpha, | 
 |     black; | 
 | } PixelPacket; | 
 |  | 
 | typedef struct _CacheView | 
 |   CacheView_; | 
 |  | 
 | /* | 
 |   Pixel method declarations. | 
 | */ | 
 | extern MagickExport ChannelType | 
 |   SetPixelChannelMask(Image *,const ChannelType); | 
 |  | 
 | extern MagickExport MagickBooleanType | 
 |   ExportImagePixels(Image *,const ssize_t,const ssize_t,const size_t, | 
 |     const size_t,const char *,const StorageType,void *,ExceptionInfo *), | 
 |   ImportImagePixels(Image *,const ssize_t,const ssize_t,const size_t, | 
 |     const size_t,const char *,const StorageType,const void *,ExceptionInfo *), | 
 |   InterpolatePixelChannel(const Image *,const CacheView_ *, | 
 |     const PixelChannel,const PixelInterpolateMethod,const double,const double, | 
 |     double *,ExceptionInfo *), | 
 |   InterpolatePixelChannels(const Image *,const CacheView_ *,const Image *, | 
 |     const PixelInterpolateMethod,const double,const double,Quantum *, | 
 |     ExceptionInfo *), | 
 |   InterpolatePixelInfo(const Image *,const CacheView_ *, | 
 |     const PixelInterpolateMethod,const double,const double,PixelInfo *, | 
 |     ExceptionInfo *), | 
 |   IsFuzzyEquivalencePixel(const Image *,const Quantum *,const Image *, | 
 |     const Quantum *), | 
 |   IsFuzzyEquivalencePixelInfo(const PixelInfo *,const PixelInfo *), | 
 |   SetPixelMetaChannels(Image *,const size_t,ExceptionInfo *); | 
 |  | 
 | extern MagickExport MagickRealType | 
 |   GetPixelInfoIntensity(const Image *magick_restrict, | 
 |     const PixelInfo *magick_restrict) magick_hot_spot, | 
 |   GetPixelIntensity(const Image *magick_restrict, | 
 |     const Quantum *magick_restrict) magick_hot_spot; | 
 |  | 
 | extern MagickExport PixelChannelMap | 
 |   *AcquirePixelChannelMap(void), | 
 |   *ClonePixelChannelMap(PixelChannelMap *), | 
 |   *DestroyPixelChannelMap(PixelChannelMap *); | 
 |  | 
 | extern MagickExport PixelInfo | 
 |   *ClonePixelInfo(const PixelInfo *); | 
 |  | 
 | extern MagickExport MagickRealType | 
 |   DecodePixelGamma(const MagickRealType) magick_hot_spot, | 
 |   EncodePixelGamma(const MagickRealType) magick_hot_spot; | 
 |  | 
 | extern MagickExport void | 
 |   ConformPixelInfo(Image *,const PixelInfo *,PixelInfo *,ExceptionInfo *), | 
 |   GetPixelInfo(const Image *,PixelInfo *), | 
 |   InitializePixelChannelMap(Image *); | 
 |  | 
 | #if defined(__cplusplus) || defined(c_plusplus) | 
 | } | 
 | #endif | 
 |  | 
 | #endif |