1 /* 2 Copyright 1999-2016 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 #include "MagickCore/colorspace.h" 22 23 #if defined(__cplusplus) || defined(c_plusplus) 24 extern "C" { 25 #endif 26 27 #define MaxPixelChannels 32 28 #undef index 29 30 /* 31 Pixel enum declarations. 32 */ 33 typedef enum 34 { 35 UndefinedChannel = 0x0000, 36 RedChannel = 0x0001, 37 GrayChannel = 0x0001, 38 CyanChannel = 0x0001, 39 GreenChannel = 0x0002, 40 MagentaChannel = 0x0002, 41 BlueChannel = 0x0004, 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, /* ???? */ 50 CompositeChannels = 0x001F, 51 AllChannels = 0x7ffffff, 52 /* 53 Special purpose channel types. 54 FUTURE: are these needed any more - they are more like hacks 55 SyncChannels for example is NOT a real channel but a 'flag' 56 It really says -- "User has not defined channels" 57 Though it does have extra meaning in the "-auto-level" operator 58 */ 59 TrueAlphaChannel = 0x0100, /* extract actual alpha channel from opacity */ 60 RGBChannels = 0x0200, /* set alpha from grayscale mask in RGB */ 61 GrayChannels = 0x0400, 62 SyncChannels = 0x20000, /* channels modified as a single unit */ 63 DefaultChannels = AllChannels 64 } ChannelType; /* must correspond to PixelChannel */ 65 66 typedef enum 67 { 68 UndefinedPixelChannel = 0, 69 RedPixelChannel = 0, 70 CyanPixelChannel = 0, 71 GrayPixelChannel = 0, 72 LPixelChannel = 0, 73 LabelPixelChannel = 0, 74 YPixelChannel = 0, 75 aPixelChannel = 1, 76 GreenPixelChannel = 1, 77 MagentaPixelChannel = 1, 78 CbPixelChannel = 1, 79 bPixelChannel = 2, 80 BluePixelChannel = 2, 81 YellowPixelChannel = 2, 82 CrPixelChannel = 2, 83 BlackPixelChannel = 3, 84 AlphaPixelChannel = 4, 85 IndexPixelChannel = 5, 86 ReadMaskPixelChannel = 6, 87 WriteMaskPixelChannel = 7, 88 MetaPixelChannel = 8, 89 IntensityPixelChannel = MaxPixelChannels, /* ???? */ 90 CompositePixelChannel = MaxPixelChannels, /* ???? */ 91 SyncPixelChannel = MaxPixelChannels+1 /* not a real channel */ 92 } PixelChannel; /* must correspond to ChannelType */ 93 94 typedef enum 95 { 96 UndefinedPixelIntensityMethod = 0, 97 AveragePixelIntensityMethod, 98 BrightnessPixelIntensityMethod, 99 LightnessPixelIntensityMethod, 100 MSPixelIntensityMethod, 101 Rec601LumaPixelIntensityMethod, 102 Rec601LuminancePixelIntensityMethod, 103 Rec709LumaPixelIntensityMethod, 104 Rec709LuminancePixelIntensityMethod, 105 RMSPixelIntensityMethod 106 } PixelIntensityMethod; 107 108 typedef enum 109 { 110 UndefinedInterpolatePixel, 111 AverageInterpolatePixel, /* Average 4 nearest neighbours */ 112 Average9InterpolatePixel, /* Average 9 nearest neighbours */ 113 Average16InterpolatePixel, /* Average 16 nearest neighbours */ 114 BackgroundInterpolatePixel, /* Just return background color */ 115 BilinearInterpolatePixel, /* Triangular filter interpolation */ 116 BlendInterpolatePixel, /* blend of nearest 1, 2 or 4 pixels */ 117 CatromInterpolatePixel, /* Catmull-Rom interpolation */ 118 IntegerInterpolatePixel, /* Integer (floor) interpolation */ 119 MeshInterpolatePixel, /* Triangular Mesh interpolation */ 120 NearestInterpolatePixel, /* Nearest Neighbour Only */ 121 SplineInterpolatePixel /* Cubic Spline (blurred) interpolation */ 122 /* FilterInterpolatePixel, ** Use resize filter - (very slow) */ 123 } PixelInterpolateMethod; 124 125 typedef enum 126 { 127 UndefinedPixelMask = 0x000000, 128 ReadPixelMask = 0x000001, 129 WritePixelMask = 0x000002 130 } PixelMask; 131 132 typedef enum 133 { 134 UndefinedPixelTrait = 0x000000, 135 CopyPixelTrait = 0x000001, 136 UpdatePixelTrait = 0x000002, 137 BlendPixelTrait = 0x000004 138 } PixelTrait; 139 140 typedef enum 141 { 142 UndefinedPixel, 143 CharPixel, 144 DoublePixel, 145 FloatPixel, 146 LongPixel, 147 LongLongPixel, 148 QuantumPixel, 149 ShortPixel 150 } StorageType; 151 152 /* 153 Pixel typedef declarations. 154 */ 155 typedef struct _PixelChannelMap 156 { 157 PixelChannel 158 channel; 159 160 PixelTrait 161 traits; 162 163 ssize_t 164 offset; 165 } PixelChannelMap; 166 167 typedef struct _PixelInfo 168 { 169 ClassType 170 storage_class; 171 172 ColorspaceType 173 colorspace; 174 175 PixelTrait 176 alpha_trait; 177 178 double 179 fuzz; 180 181 size_t 182 depth; 183 184 MagickSizeType 185 count; 186 187 MagickRealType 188 red, 189 green, 190 blue, 191 black, 192 alpha, 193 index; 194 } PixelInfo; 195 196 typedef struct _PixelPacket 197 { 198 unsigned int 199 red, 200 green, 201 blue, 202 alpha, 203 black; 204 } PixelPacket; 205 206 typedef struct _CacheView 207 CacheView_; 208 209 /* 210 Pixel method declarations. 211 */ 212 extern MagickExport ChannelType 213 SetPixelChannelMask(Image *,const ChannelType); 214 215 extern MagickExport MagickBooleanType 216 ExportImagePixels(const Image *,const ssize_t,const ssize_t,const size_t, 217 const size_t,const char *,const StorageType,void *,ExceptionInfo *), 218 ImportImagePixels(Image *,const ssize_t,const ssize_t,const size_t, 219 const size_t,const char *,const StorageType,const void *,ExceptionInfo *), 220 InterpolatePixelChannel(const Image *,const CacheView_ *, 221 const PixelChannel,const PixelInterpolateMethod,const double,const double, 222 double *,ExceptionInfo *), 223 InterpolatePixelChannels(const Image *,const CacheView_ *,const Image *, 224 const PixelInterpolateMethod,const double,const double,Quantum *, 225 ExceptionInfo *), 226 InterpolatePixelInfo(const Image *,const CacheView_ *, 227 const PixelInterpolateMethod,const double,const double,PixelInfo *, 228 ExceptionInfo *), 229 IsFuzzyEquivalencePixel(const Image *,const Quantum *,const Image *, 230 const Quantum *), 231 IsFuzzyEquivalencePixelInfo(const PixelInfo *,const PixelInfo *), 232 SetPixelMetaChannels(Image *,const size_t,ExceptionInfo *); 233 234 extern MagickExport MagickRealType 235 GetPixelInfoIntensity(const Image *magick_restrict, 236 const PixelInfo *magick_restrict) magick_hot_spot, 237 GetPixelIntensity(const Image *magick_restrict, 238 const Quantum *magick_restrict) magick_hot_spot; 239 240 extern MagickExport PixelChannelMap 241 *AcquirePixelChannelMap(void), 242 *ClonePixelChannelMap(PixelChannelMap *), 243 *DestroyPixelChannelMap(PixelChannelMap *); 244 245 extern MagickExport PixelInfo 246 *ClonePixelInfo(const PixelInfo *); 247 248 extern MagickExport MagickRealType 249 DecodePixelGamma(const MagickRealType) magick_hot_spot, 250 EncodePixelGamma(const MagickRealType) magick_hot_spot; 251 252 extern MagickExport void 253 ConformPixelInfo(Image *,const PixelInfo *,PixelInfo *,ExceptionInfo *), 254 GetPixelInfo(const Image *,PixelInfo *), 255 InitializePixelChannelMap(Image *); 256 257 #if defined(__cplusplus) || defined(c_plusplus) 258 } 259 #endif 260 261 #endif 262