]> granicus.if.org Git - imagemagick/blobdiff - MagickCore/pixel.h
(no commit message)
[imagemagick] / MagickCore / pixel.h
index 05e59e6f29dccc066df736fee7ee64496300772d..ed19bbcaa4621d7ee911823775d70f2764fc6391 100644 (file)
@@ -1,5 +1,5 @@
 /*
-  Copyright 1999-2011 ImageMagick Studio LLC, a non-profit organization
+  Copyright 1999-2012 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.
@@ -13,7 +13,7 @@
   See the License for the specific language governing permissions and
   limitations under the License.
 
-  MagickCore image constitute methods.
+  MagickCore image pixel methods.
 */
 #ifndef _MAGICKCORE_PIXEL_H
 #define _MAGICKCORE_PIXEL_H
@@ -23,75 +23,103 @@ extern "C" {
 #endif
 
 #include <MagickCore/colorspace.h>
-#include <MagickCore/constitute.h>
+
+#define MaxPixelChannels  32
+#undef index
+
+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,
+  MaskChannel = 0x0040,
+  MetaChannel = 0x0080,
+  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"
+  */
+  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 | SyncChannels) &~ AlphaChannel)
+} ChannelType;  /* must correspond to PixelChannel */
 
 typedef enum
 {
   UndefinedInterpolatePixel,
-  AverageInterpolatePixel,
-  BicubicInterpolatePixel,
-  BilinearInterpolatePixel,
-  FilterInterpolatePixel,
-  IntegerInterpolatePixel,
-  MeshInterpolatePixel,
-  NearestNeighborInterpolatePixel,
-  SplineInterpolatePixel
-} InterpolatePixelMethod;
+  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
 {
-  RedPixelComponent = 0,
-  CyanPixelComponent = 0,
-  GrayPixelComponent = 0,
-  YPixelComponent = 0,
-  GreenPixelComponent = 1,
-  MagentaPixelComponent = 1,
-  CbPixelComponent = 1,
-  BluePixelComponent = 2,
-  YellowPixelComponent = 2,
-  CrPixelComponent = 2,
-  AlphaPixelComponent = 3,
-  BlackPixelComponent = 4,
-  IndexPixelComponent = 4,
-  MaskPixelComponent = 5
-} PixelComponent;
+  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,
+  MaskPixelChannel = 6,                 /* Image Write Mask */
+  MetaPixelChannel = 7,                 /* ??? */
+  IntensityPixelChannel = MaxPixelChannels,  /* what are these ??? */
+  CompositePixelChannel = MaxPixelChannels,
+  SyncPixelChannel = MaxPixelChannels+1
+} PixelChannel;  /* must correspond to ChannelType */
 
 typedef enum
 {
-  UndefinedPixelTrait,
-  AlphaPixelTrait,
-  IgnorePixelTrait,
-  UnusedPixelTrait
+  UndefinedPixelTrait = 0x000000,
+  CopyPixelTrait = 0x000001,
+  UpdatePixelTrait = 0x000002,
+  BlendPixelTrait = 0x000004
 } PixelTrait;
 
-typedef struct _PixelComponentMap
+typedef struct _PixelChannelMap
 {
-  PixelComponent
-    component;
+  PixelChannel
+    channel;
 
   PixelTrait
-    trait;
-} PixelComponentMap;
+    traits;
 
-typedef struct _DoublePixelPacket
-{
-  double
-    red,
-    green,
-    blue,
-    alpha,
-    black;
-} DoublePixelPacket;
-
-typedef struct _LongPixelPacket
-{
-  unsigned int
-    red,
-    green,
-    blue,
-    alpha,
-    black;
-} LongPixelPacket;
+  ssize_t
+    offset;
+} PixelChannelMap;
 
 typedef struct _PixelInfo
 {
@@ -101,8 +129,8 @@ typedef struct _PixelInfo
   ColorspaceType
     colorspace;
 
-  MagickBooleanType
-    matte;
+  PixelTrait
+    alpha_trait;
 
   double
     fuzz;
@@ -110,57 +138,74 @@ typedef struct _PixelInfo
   size_t
     depth;
 
+  MagickSizeType
+    count;
+
   MagickRealType
     red,
     green,
     blue,
-    alpha,
     black,
+    alpha,
     index;
 } PixelInfo;
 
 typedef struct _PixelPacket
 {
-  Quantum
+  unsigned int
     red,
     green,
     blue,
     alpha,
-    black,
-    index;
-
- MagickSizeType
-    count;
+    black;
 } PixelPacket;
 
+typedef enum
+{
+  UndefinedPixel,
+  CharPixel,
+  DoublePixel,
+  FloatPixel,
+  LongPixel,
+  LongLongPixel,
+  QuantumPixel,
+  ShortPixel
+} StorageType;
+
 typedef struct _CacheView
   CacheView_;
 
 extern MagickExport MagickBooleanType
-  ExportImagePixels(const Image *,const ssize_t,const ssize_t,const size_t,
+  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 *),
+    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 InterpolatePixelMethod,const double,const double,PixelInfo *,
+    const PixelInterpolateMethod,const double,const double,PixelInfo *,
     ExceptionInfo *),
-  IsFuzzyEquivalencePixel(const Image *,const Quantum *,
+  IsFuzzyEquivalencePixel(const Image *,const Quantum *,const Image *,
     const Quantum *),
   IsFuzzyEquivalencePixelInfo(const PixelInfo *,const PixelInfo *),
-  IsFuzzyEquivalencePixelPacket(const Image *,const PixelPacket *,
-    const PixelPacket *);
+  SetPixelMetaChannels(Image *,const size_t,ExceptionInfo *);
 
-extern MagickExport PixelComponentMap
-  *AcquirePixelComponentMap(void),
-  *ClonePixelComponentMap(const PixelComponentMap *),
-  *DestroyPixelComponentMap(PixelComponentMap *);
+extern MagickExport PixelChannelMap
+  *AcquirePixelChannelMap(void),
+  *ClonePixelChannelMap(PixelChannelMap *),
+  *DestroyPixelChannelMap(PixelChannelMap *);
 
 extern MagickExport PixelInfo
   *ClonePixelInfo(const PixelInfo *);
 
 extern MagickExport void
-  DefinePixelComponentMap(Image *),
-  GetPixelInfo(const Image *,PixelInfo *);
+  InitializePixelChannelMap(Image *),
+  GetPixelInfo(const Image *,PixelInfo *),
+  SetPixelChannelMask(Image *,const ChannelType);
 
 #if defined(__cplusplus) || defined(c_plusplus)
 }