1 /* 2 Copyright 1999-2020 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. You may 6 obtain a copy of the License at 7 8 https://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, /* not used */ 50 CompositeMaskChannel = 0x0200, /* SVG mask */ 51 CompositeChannels = 0x001F, 52 AllChannels = 0x7ffffff, 53 /* 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 59 */ 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 */ 66 67 typedef enum 68 { 69 UndefinedPixelChannel = 0, 70 RedPixelChannel = 0, 71 CyanPixelChannel = 0, 72 GrayPixelChannel = 0, 73 LPixelChannel = 0, 74 LabelPixelChannel = 0, 75 YPixelChannel = 0, 76 aPixelChannel = 1, 77 GreenPixelChannel = 1, 78 MagentaPixelChannel = 1, 79 CbPixelChannel = 1, 80 bPixelChannel = 2, 81 BluePixelChannel = 2, 82 YellowPixelChannel = 2, 83 CrPixelChannel = 2, 84 BlackPixelChannel = 3, 85 AlphaPixelChannel = 4, 86 IndexPixelChannel = 5, 87 ReadMaskPixelChannel = 6, 88 WriteMaskPixelChannel = 7, 89 MetaPixelChannel = 8, 90 CompositeMaskPixelChannel = 9, 91 IntensityPixelChannel = MaxPixelChannels, /* ???? */ 92 CompositePixelChannel = MaxPixelChannels, /* ???? */ 93 SyncPixelChannel = MaxPixelChannels+1 /* not a real channel */ 94 } PixelChannel; /* must correspond to ChannelType */ 95 96 typedef enum 97 { 98 UndefinedPixelIntensityMethod = 0, 99 AveragePixelIntensityMethod, 100 BrightnessPixelIntensityMethod, 101 LightnessPixelIntensityMethod, 102 MSPixelIntensityMethod, 103 Rec601LumaPixelIntensityMethod, 104 Rec601LuminancePixelIntensityMethod, 105 Rec709LumaPixelIntensityMethod, 106 Rec709LuminancePixelIntensityMethod, 107 RMSPixelIntensityMethod 108 } PixelIntensityMethod; 109 110 typedef enum 111 { 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; 125 126 typedef enum 127 { 128 UndefinedPixelMask = 0x000000, 129 ReadPixelMask = 0x000001, 130 WritePixelMask = 0x000002, 131 CompositePixelMask = 0x000004 132 } PixelMask; 133 134 typedef enum 135 { 136 UndefinedPixelTrait = 0x000000, 137 CopyPixelTrait = 0x000001, 138 UpdatePixelTrait = 0x000002, 139 BlendPixelTrait = 0x000004 140 } PixelTrait; 141 142 typedef enum 143 { 144 UndefinedPixel, 145 CharPixel, 146 DoublePixel, 147 FloatPixel, 148 LongPixel, 149 LongLongPixel, 150 QuantumPixel, 151 ShortPixel 152 } StorageType; 153 154 /* 155 Pixel typedef declarations. 156 */ 157 typedef struct _PixelChannelMap 158 { 159 PixelChannel 160 channel; 161 162 PixelTrait 163 traits; 164 165 ssize_t 166 offset; 167 } PixelChannelMap; 168 169 typedef struct _PixelInfo 170 { 171 ClassType 172 storage_class; 173 174 ColorspaceType 175 colorspace; 176 177 PixelTrait 178 alpha_trait; 179 180 double 181 fuzz; 182 183 size_t 184 depth; 185 186 MagickSizeType 187 count; 188 189 MagickRealType 190 red, 191 green, 192 blue, 193 black, 194 alpha, 195 index; 196 } PixelInfo; 197 198 typedef struct _PixelPacket 199 { 200 unsigned int 201 red, 202 green, 203 blue, 204 alpha, 205 black; 206 } PixelPacket; 207 208 typedef struct _CacheView 209 CacheView_; 210 211 /* 212 Pixel method declarations. 213 */ 214 extern MagickExport ChannelType 215 SetPixelChannelMask(Image *,const ChannelType); 216 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 *, 230 ExceptionInfo *), 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 *); 236 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; 242 243 extern MagickExport PixelChannelMap 244 *AcquirePixelChannelMap(void), 245 *ClonePixelChannelMap(PixelChannelMap *), 246 *DestroyPixelChannelMap(PixelChannelMap *); 247 248 extern MagickExport PixelInfo 249 *ClonePixelInfo(const PixelInfo *); 250 251 extern MagickExport MagickRealType 252 DecodePixelGamma(const MagickRealType) magick_hot_spot, 253 EncodePixelGamma(const MagickRealType) magick_hot_spot; 254 255 extern MagickExport void 256 ConformPixelInfo(Image *,const PixelInfo *,PixelInfo *,ExceptionInfo *), 257 GetPixelInfo(const Image *,PixelInfo *), 258 InitializePixelChannelMap(Image *); 259 260 #if defined(__cplusplus) || defined(c_plusplus) 261 } 262 #endif 263 264 #endif 265