]> granicus.if.org Git - imagemagick/blob - MagickCore/pixel.h
(no commit message)
[imagemagick] / MagickCore / pixel.h
1 /*
2   Copyright 1999-2013 ImageMagick Studio LLC, a non-profit organization
3   dedicated to making software imaging solutions freely available.
4
5   You may not use this file except in compliance with the License.
6   obtain a copy of the License at
7
8     http://www.imagemagick.org/script/license.php
9
10   Unless required by applicable law or agreed to in writing, software
11   distributed under the License is distributed on an "AS IS" BASIS,
12   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   See the License for the specific language governing permissions and
14   limitations under the License.
15
16   MagickCore image pixel methods.
17 */
18 #ifndef _MAGICKCORE_PIXEL_H
19 #define _MAGICKCORE_PIXEL_H
20
21 #if defined(__cplusplus) || defined(c_plusplus)
22 extern "C" {
23 #endif
24
25 #include "MagickCore/colorspace.h"
26
27 #define MaxPixelChannels  32
28 #undef index
29
30 typedef enum
31 {
32   UndefinedChannel = 0x0000,
33   RedChannel = 0x0001,
34   GrayChannel = 0x0001,
35   CyanChannel = 0x0001,
36   GreenChannel = 0x0002,
37   MagentaChannel = 0x0002,
38   BlueChannel = 0x0004,
39   YellowChannel = 0x0004,
40   BlackChannel = 0x0008,
41   AlphaChannel = 0x0010,
42   OpacityChannel = 0x0010,
43   IndexChannel = 0x0020,
44   MaskChannel = 0x0040,
45   MetaChannel = 0x0080,
46   CompositeChannels = 0x002F,
47   AllChannels = 0x7ffffff,
48   /*
49     Special purpose channel types.
50     FUTURE: are these needed any more - they are more like hacks
51     SyncChannels for example is NOT a real channel but a 'flag'
52     It really says -- "User has not defined channels"
53   */
54   TrueAlphaChannel = 0x0100, /* extract actual alpha channel from opacity */
55   RGBChannels = 0x0200,      /* set alpha from grayscale mask in RGB */
56   GrayChannels = 0x0400,
57   SyncChannels = 0x20000,    /* channels modified as a single unit */
58   DefaultChannels = ((AllChannels | SyncChannels) &~ AlphaChannel)
59 } ChannelType;  /* must correspond to PixelChannel */
60
61 typedef enum
62 {
63   UndefinedPixelChannel = 0,
64   RedPixelChannel = 0,
65   CyanPixelChannel = 0,
66   GrayPixelChannel = 0,
67   LPixelChannel = 0,
68   YPixelChannel = 0,
69   aPixelChannel = 1,
70   GreenPixelChannel = 1,
71   MagentaPixelChannel = 1,
72   CbPixelChannel = 1,
73   bPixelChannel = 2,
74   BluePixelChannel = 2,
75   YellowPixelChannel = 2,
76   CrPixelChannel = 2,
77   BlackPixelChannel = 3,
78   AlphaPixelChannel = 4,
79   IndexPixelChannel = 5,
80   MaskPixelChannel = 6,                 /* Image Write Mask */
81   MetaPixelChannel = 7,                 /* ??? */
82   IntensityPixelChannel = MaxPixelChannels,  /* what are these ??? */
83   CompositePixelChannel = MaxPixelChannels,
84   SyncPixelChannel = MaxPixelChannels+1
85 } PixelChannel;  /* must correspond to ChannelType */
86
87 typedef enum
88 {
89   UndefinedPixelIntensityMethod = 0,
90   AveragePixelIntensityMethod,
91   BrightnessPixelIntensityMethod,
92   LightnessPixelIntensityMethod,
93   Rec601LumaPixelIntensityMethod,
94   Rec709LumaPixelIntensityMethod,
95   RMSPixelIntensityMethod
96 } PixelIntensityMethod;
97
98 typedef enum
99 {
100   UndefinedInterpolatePixel,
101   AverageInterpolatePixel,    /* Average 4 nearest neighbours */
102   Average9InterpolatePixel,   /* Average 9 nearest neighbours */
103   Average16InterpolatePixel,  /* Average 16 nearest neighbours */
104   BackgroundInterpolatePixel, /* Just return background color */
105   BilinearInterpolatePixel,   /* Triangular filter interpolation */
106   BlendInterpolatePixel,      /* blend of nearest 1, 2 or 4 pixels */
107   CatromInterpolatePixel,     /* Catmull-Rom interpolation */
108   IntegerInterpolatePixel,    /* Integer (floor) interpolation */
109   MeshInterpolatePixel,       /* Triangular Mesh interpolation */
110   NearestInterpolatePixel,    /* Nearest Neighbour Only */
111   SplineInterpolatePixel     /* Cubic Spline (blurred) interpolation */
112   /* FilterInterpolatePixel,  ** Use resize filter - (very slow) */
113 } PixelInterpolateMethod;
114
115 typedef enum
116 {
117   UndefinedPixelTrait = 0x000000,
118   CopyPixelTrait = 0x000001,
119   UpdatePixelTrait = 0x000002,
120   BlendPixelTrait = 0x000004
121 } PixelTrait;
122
123 typedef struct _PixelChannelMap
124 {
125   PixelChannel
126     channel;
127
128   PixelTrait
129     traits;
130
131   ssize_t
132     offset;
133 } PixelChannelMap;
134
135 typedef struct _PixelInfo
136 {
137   ClassType
138     storage_class;
139
140   ColorspaceType
141     colorspace;
142
143   PixelTrait
144     alpha_trait;
145
146   double
147     fuzz;
148
149   size_t
150     depth;
151
152   MagickSizeType
153     count;
154
155   MagickRealType
156     red,
157     green,
158     blue,
159     black,
160     alpha,
161     index;
162 } PixelInfo;
163
164 typedef struct _PixelPacket
165 {
166   unsigned int
167     red,
168     green,
169     blue,
170     alpha,
171     black;
172 } PixelPacket;
173
174 typedef enum
175 {
176   UndefinedPixel,
177   CharPixel,
178   DoublePixel,
179   FloatPixel,
180   LongPixel,
181   LongLongPixel,
182   QuantumPixel,
183   ShortPixel
184 } StorageType;
185
186 typedef struct _CacheView
187   CacheView_;
188
189 extern MagickExport MagickBooleanType
190   ExportImagePixels(Image *,const ssize_t,const ssize_t,const size_t,
191     const size_t,const char *,const StorageType,void *,ExceptionInfo *),
192   ImportImagePixels(Image *,const ssize_t,const ssize_t,const size_t,
193     const size_t,const char *,const StorageType,const void *,ExceptionInfo *),
194   InterpolatePixelChannel(const Image *,const CacheView_ *,
195     const PixelChannel,const PixelInterpolateMethod,const double,const double,
196     double *,ExceptionInfo *),
197   InterpolatePixelChannels(const Image *,const CacheView_ *,const Image *,
198     const PixelInterpolateMethod,const double,const double,Quantum *,
199     ExceptionInfo *),
200   InterpolatePixelInfo(const Image *,const CacheView_ *,
201     const PixelInterpolateMethod,const double,const double,PixelInfo *,
202     ExceptionInfo *),
203   IsFuzzyEquivalencePixel(const Image *,const Quantum *,const Image *,
204     const Quantum *),
205   IsFuzzyEquivalencePixelInfo(const PixelInfo *,const PixelInfo *),
206   SetPixelMetaChannels(Image *,const size_t,ExceptionInfo *);
207
208 extern MagickExport MagickRealType
209   GetPixelIntensity(const Image *restrict,const Quantum *restrict)
210     magick_hot_spot;
211
212 extern MagickExport PixelChannelMap
213   *AcquirePixelChannelMap(void),
214   *ClonePixelChannelMap(PixelChannelMap *),
215   *DestroyPixelChannelMap(PixelChannelMap *);
216
217 extern MagickExport PixelInfo
218   *ClonePixelInfo(const PixelInfo *);
219
220 extern MagickExport MagickRealType
221   DecodePixelGamma(const MagickRealType) magick_hot_spot,
222   EncodePixelGamma(const MagickRealType) magick_hot_spot;
223
224 extern MagickExport void
225   InitializePixelChannelMap(Image *),
226   GetPixelInfo(const Image *,PixelInfo *),
227   SetPixelChannelMask(Image *,const ChannelType);
228
229 #if defined(__cplusplus) || defined(c_plusplus)
230 }
231 #endif
232
233 #endif