2 Copyright 1999-2019 ImageMagick Studio LLC, a non-profit organization
3 dedicated to making software imaging solutions freely available.
5 You may not use this file except in compliance with the License. You may
6 obtain a copy of the License at
8 https://imagemagick.org/script/license.php
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.
16 MagickCore image pixel methods.
18 #ifndef MAGICKCORE_PIXEL_H
19 #define MAGICKCORE_PIXEL_H
21 #include "MagickCore/colorspace.h"
23 #if defined(__cplusplus) || defined(c_plusplus)
27 #define MaxPixelChannels 32
31 Pixel enum declarations.
35 UndefinedChannel = 0x0000,
39 GreenChannel = 0x0002,
40 MagentaChannel = 0x0002,
42 YellowChannel = 0x0004,
43 BlackChannel = 0x0008,
44 AlphaChannel = 0x0010,
45 OpacityChannel = 0x0010,
46 IndexChannel = 0x0020, /* Color Index Table? */
47 ReadMaskChannel = 0x0040, /* Pixel is Not Readable? */
48 WriteMaskChannel = 0x0080, /* Pixel is Write Protected? */
49 MetaChannel = 0x0100, /* not used */
50 CompositeMaskChannel = 0x0200, /* SVG mask */
51 CompositeChannels = 0x001F,
52 AllChannels = 0x7ffffff,
54 Special purpose channel types.
55 FUTURE: are these needed any more - they are more like hacks
56 SyncChannels for example is NOT a real channel but a 'flag'
57 It really says -- "User has not defined channels"
58 Though it does have extra meaning in the "-auto-level" operator
60 TrueAlphaChannel = 0x0100, /* extract actual alpha channel from opacity */
61 RGBChannels = 0x0200, /* set alpha from grayscale mask in RGB */
62 GrayChannels = 0x0400,
63 SyncChannels = 0x20000, /* channels modified as a single unit */
64 DefaultChannels = AllChannels
65 } ChannelType; /* must correspond to PixelChannel */
69 UndefinedPixelChannel = 0,
74 LabelPixelChannel = 0,
77 GreenPixelChannel = 1,
78 MagentaPixelChannel = 1,
82 YellowPixelChannel = 2,
84 BlackPixelChannel = 3,
85 AlphaPixelChannel = 4,
86 IndexPixelChannel = 5,
87 ReadMaskPixelChannel = 6,
88 WriteMaskPixelChannel = 7,
90 CompositeMaskPixelChannel = 9,
91 IntensityPixelChannel = MaxPixelChannels, /* ???? */
92 CompositePixelChannel = MaxPixelChannels, /* ???? */
93 SyncPixelChannel = MaxPixelChannels+1 /* not a real channel */
94 } PixelChannel; /* must correspond to ChannelType */
98 UndefinedPixelIntensityMethod = 0,
99 AveragePixelIntensityMethod,
100 BrightnessPixelIntensityMethod,
101 LightnessPixelIntensityMethod,
102 MSPixelIntensityMethod,
103 Rec601LumaPixelIntensityMethod,
104 Rec601LuminancePixelIntensityMethod,
105 Rec709LumaPixelIntensityMethod,
106 Rec709LuminancePixelIntensityMethod,
107 RMSPixelIntensityMethod
108 } PixelIntensityMethod;
112 UndefinedInterpolatePixel,
113 AverageInterpolatePixel, /* Average 4 nearest neighbours */
114 Average9InterpolatePixel, /* Average 9 nearest neighbours */
115 Average16InterpolatePixel, /* Average 16 nearest neighbours */
116 BackgroundInterpolatePixel, /* Just return background color */
117 BilinearInterpolatePixel, /* Triangular filter interpolation */
118 BlendInterpolatePixel, /* blend of nearest 1, 2 or 4 pixels */
119 CatromInterpolatePixel, /* Catmull-Rom interpolation */
120 IntegerInterpolatePixel, /* Integer (floor) interpolation */
121 MeshInterpolatePixel, /* Triangular Mesh interpolation */
122 NearestInterpolatePixel, /* Nearest Neighbour Only */
123 SplineInterpolatePixel /* Cubic Spline (blurred) interpolation */
124 } PixelInterpolateMethod;
128 UndefinedPixelMask = 0x000000,
129 ReadPixelMask = 0x000001,
130 WritePixelMask = 0x000002,
131 CompositePixelMask = 0x000004
136 UndefinedPixelTrait = 0x000000,
137 CopyPixelTrait = 0x000001,
138 UpdatePixelTrait = 0x000002,
139 BlendPixelTrait = 0x000004
155 Pixel typedef declarations.
157 typedef struct _PixelChannelMap
169 typedef struct _PixelInfo
198 typedef struct _PixelPacket
208 typedef struct _CacheView
212 Pixel method declarations.
214 extern MagickExport ChannelType
215 SetPixelChannelMask(Image *,const ChannelType);
217 extern MagickExport MagickBooleanType
218 ExportImagePixels(const Image *,const ssize_t,const ssize_t,const size_t,
219 const size_t,const char *,const StorageType,void *,ExceptionInfo *),
220 ImportImagePixels(Image *,const ssize_t,const ssize_t,const size_t,
221 const size_t,const char *,const StorageType,const void *,ExceptionInfo *),
222 InterpolatePixelChannel(const Image *magick_restrict,const CacheView_ *,
223 const PixelChannel,const PixelInterpolateMethod,const double,const double,
224 double *,ExceptionInfo *),
225 InterpolatePixelChannels(const Image *magick_restrict,const CacheView_ *,
226 const Image * magick_restrict,const PixelInterpolateMethod,const double,
227 const double,Quantum *,ExceptionInfo *),
228 InterpolatePixelInfo(const Image *,const CacheView_ *,
229 const PixelInterpolateMethod,const double,const double,PixelInfo *,
231 IsFuzzyEquivalencePixel(const Image *,const Quantum *,const Image *,
232 const Quantum *) magick_attribute((__pure__)),
233 IsFuzzyEquivalencePixelInfo(const PixelInfo *,const PixelInfo *)
234 magick_attribute((__pure__)),
235 SetPixelMetaChannels(Image *,const size_t,ExceptionInfo *);
237 extern MagickExport MagickRealType
238 GetPixelInfoIntensity(const Image *magick_restrict,
239 const PixelInfo *magick_restrict) magick_hot_spot,
240 GetPixelIntensity(const Image *magick_restrict,
241 const Quantum *magick_restrict) magick_hot_spot;
243 extern MagickExport PixelChannelMap
244 *AcquirePixelChannelMap(void),
245 *ClonePixelChannelMap(PixelChannelMap *),
246 *DestroyPixelChannelMap(PixelChannelMap *);
248 extern MagickExport PixelInfo
249 *ClonePixelInfo(const PixelInfo *);
251 extern MagickExport MagickRealType
252 DecodePixelGamma(const MagickRealType) magick_hot_spot,
253 EncodePixelGamma(const MagickRealType) magick_hot_spot;
255 extern MagickExport void
256 ConformPixelInfo(Image *,const PixelInfo *,PixelInfo *,ExceptionInfo *),
257 GetPixelInfo(const Image *,PixelInfo *),
258 InitializePixelChannelMap(Image *);
260 #if defined(__cplusplus) || defined(c_plusplus)