MagickCore  6.8.9
pixel-accessor.h
Go to the documentation of this file.
1 /*
2  Copyright 1999-2014 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 pixel accessor methods.
17 */
18 #ifndef _MAGICKCORE_PIXEL_ACCESSOR_H
19 #define _MAGICKCORE_PIXEL_ACCESSOR_H
20 
21 #include <math.h>
22 #include "magick/gem.h"
23 #include "magick/pixel.h"
24 
25 #if defined(__cplusplus) || defined(c_plusplus)
26 extern "C" {
27 #endif
28 
29 #define ClampPixelRed(pixel) ClampToQuantum((pixel)->red)
30 #define ClampPixelGreen(pixel) ClampToQuantum((pixel)->green)
31 #define ClampPixelBlue(pixel) ClampToQuantum((pixel)->blue)
32 #define ClampPixelIndex(indexes) ClampToQuantum(*(indexes))
33 #define ClampPixelOpacity(pixel) ClampToQuantum((pixel)->opacity)
34 #define GetPixela(pixel) ((pixel)->green)
35 #define GetPixelb(pixel) ((pixel)->blue)
36 #define GetPixelAlpha(pixel) (QuantumRange-(pixel)->opacity)
37 #define GetPixelBlack(indexes) (*(indexes))
38 #define GetPixelBlue(pixel) ((pixel)->blue)
39 #define GetPixelCb(pixel) ((pixel)->green)
40 #define GetPixelCr(pixel) ((pixel)->blue)
41 #define GetPixelCyan(pixel) ((pixel)->red)
42 #define GetPixelGray(pixel) ((pixel)->red)
43 #define GetPixelGreen(pixel) ((pixel)->green)
44 #define GetPixelIndex(indexes) \
45  ((indexes == (const IndexPacket *) NULL) ? 0 : (*(indexes)))
46 #define GetPixelL(pixel) ((pixel)->red)
47 #define GetPixelMagenta(pixel) ((pixel)->green)
48 #define GetPixelNext(pixel) ((pixel)+1)
49 #define GetPixelOpacity(pixel) ((pixel)->opacity)
50 #define GetPixelRed(pixel) ((pixel)->red)
51 #define GetPixelRGB(pixel,packet) \
52 { \
53  (packet)->red=GetPixelRed((pixel)); \
54  (packet)->green=GetPixelGreen((pixel)); \
55  (packet)->blue=GetPixelBlue((pixel)); \
56 }
57 #define GetPixelRGBO(pixel,packet) \
58 { \
59  (packet)->red=GetPixelRed((pixel)); \
60  (packet)->green=GetPixelGreen((pixel)); \
61  (packet)->blue=GetPixelBlue((pixel)); \
62  (packet)->opacity=GetPixelOpacity((pixel)); \
63 }
64 #define GetPixelY(pixel) ((pixel)->red)
65 #define GetPixelYellow(pixel) ((pixel)->blue)
66 #define SetPixela(pixel,value) ((pixel)->green=(Quantum) (value))
67 #define SetPixelAlpha(pixel,value) \
68  ((pixel)->opacity=(Quantum) (QuantumRange-(value)))
69 #define SetPixelb(pixel,value) ((pixel)->blue=(Quantum) (value))
70 #define SetPixelBlack(indexes,value) (*(indexes)=(Quantum) (value))
71 #define SetPixelBlue(pixel,value) ((pixel)->blue=(Quantum) (value))
72 #define SetPixelCb(pixel,value) ((pixel)->green=(Quantum) (value))
73 #define SetPixelCr(pixel,value) ((pixel)->blue=(Quantum) (value))
74 #define SetPixelCyan(pixel,value) ((pixel)->red=(Quantum) (value))
75 #define SetPixelGray(pixel,value) \
76  ((pixel)->red=(pixel)->green=(pixel)->blue=(Quantum) (value))
77 #define SetPixelGreen(pixel,value) ((pixel)->green=(Quantum) (value))
78 #define SetPixelIndex(indexes,value) \
79 { \
80  if (indexes != (IndexPacket *) NULL) \
81  (*(indexes)=(IndexPacket) (value)); \
82 }
83 #define SetPixelL(pixel,value) ((pixel)->red=(Quantum) (value))
84 #define SetPixelMagenta(pixel,value) ((pixel)->green=(Quantum) (value))
85 #define SetPixelOpacity(pixel,value) \
86  ((pixel)->opacity=(Quantum) (value))
87 #define SetPixelRed(pixel,value) ((pixel)->red=(Quantum) (value))
88 #define SetPixelRgb(pixel,packet) \
89 { \
90  SetPixelRed(pixel,(packet)->red); \
91  SetPixelGreen(pixel,(packet)->green); \
92  SetPixelBlue(pixel,(packet)->blue); \
93 }
94 #define SetPixelRGBA(pixel,packet) \
95 { \
96  SetPixelRed(pixel,(packet)->red); \
97  SetPixelGreen(pixel,(packet)->green); \
98  SetPixelBlue(pixel,(packet)->blue); \
99  SetPixelAlpha(pixel,(QuantumRange-(packet)->opacity)); \
100 }
101 #define SetPixelRGBO(pixel,packet) \
102 { \
103  SetPixelRed(pixel,(packet)->red); \
104  SetPixelGreen(pixel,(packet)->green); \
105  SetPixelBlue(pixel,(packet)->blue); \
106  SetPixelOpacity(pixel,(packet)->opacity); \
107 }
108 #define SetPixelYellow(pixel,value) ((pixel)->blue=(Quantum) (value))
109 #define SetPixelY(pixel,value) ((pixel)->red=(Quantum) (value))
110 
112 {
113  return(x < 0.0f ? -x : x);
114 }
115 
116 static inline MagickRealType GetPixelLuma(const Image *restrict image,
117  const PixelPacket *restrict pixel)
118 {
119  if (image->colorspace == GRAYColorspace)
120  return((MagickRealType) pixel->red);
121  return(0.212656f*pixel->red+0.715158f*pixel->green+0.072186f*pixel->blue);
122 }
123 
124 static inline MagickRealType GetPixelLuminance(const Image *restrict image,
125  const PixelPacket *restrict pixel)
126 {
128  blue,
129  green,
130  red;
131 
132  if (image->colorspace == GRAYColorspace)
133  return((MagickRealType) pixel->red);
134  if (image->colorspace != sRGBColorspace)
135  return(0.212656f*pixel->red+0.715158f*pixel->green+0.072186f*pixel->blue);
136  red=DecodePixelGamma((MagickRealType) pixel->red);
137  green=DecodePixelGamma((MagickRealType) pixel->green);
138  blue=DecodePixelGamma((MagickRealType) pixel->blue);
139  return(0.212656f*red+0.715158f*green+0.072186f*blue);
140 }
141 
142 static inline MagickBooleanType IsPixelAtDepth(const Quantum pixel,
143  const QuantumAny range)
144 {
145  Quantum
146  quantum;
147 
148 #if !defined(MAGICKCORE_HDRI_SUPPORT)
150  (((MagickRealType) range*pixel)/QuantumRange+0.5)))/range+0.5);
151 #else
153  (((MagickRealType) range*pixel)/QuantumRange+0.5)))/range);
154 #endif
155  return(pixel == quantum ? MagickTrue : MagickFalse);
156 }
157 
158 static inline MagickBooleanType IsPixelGray(const PixelPacket *pixel)
159 {
161  blue,
162  green,
163  red;
164 
165  red=(MagickRealType) pixel->red;
166  green=(MagickRealType) pixel->green;
167  blue=(MagickRealType) pixel->blue;
168  if ((AbsolutePixelValue(red-green) < MagickEpsilon) &&
169  (AbsolutePixelValue(green-blue) < MagickEpsilon))
170  return(MagickTrue);
171  return(MagickFalse);
172 }
173 
174 static inline Quantum PixelPacketIntensity(const PixelPacket *pixel)
175 {
177  intensity;
178 
179  if ((pixel->red == pixel->green) && (pixel->green == pixel->blue))
180  return(pixel->red);
181  intensity=(MagickRealType) (0.212656*pixel->red+0.715158*pixel->green+
182  0.072186*pixel->blue);
183  return(ClampToQuantum(intensity));
184 }
185 
186 #if defined(__cplusplus) || defined(c_plusplus)
187 }
188 #endif
189 
190 #endif
Definition: colorspace.h:40
Quantum blue
Definition: pixel.h:143
static MagickRealType AbsolutePixelValue(const MagickRealType x)
Definition: pixel-accessor.h:111
float MagickRealType
Definition: magick-type.h:79
Definition: pixel.h:131
static MagickRealType GetPixelLuma(const Image *restrict image, const PixelPacket *restrict pixel)
Definition: pixel-accessor.h:116
Quantum green
Definition: pixel.h:143
#define MagickEpsilon
Definition: magick-type.h:142
static Quantum ClampToQuantum(const MagickRealType quantum)
Definition: quantum.h:88
Definition: image.h:152
MagickExport MagickRealType DecodePixelGamma(const MagickRealType pixel)
Definition: pixel.c:187
MagickBooleanType
Definition: magick-type.h:214
Quantum red
Definition: pixel.h:143
static MagickBooleanType IsPixelAtDepth(const Quantum pixel, const QuantumAny range)
Definition: pixel-accessor.h:142
Definition: magick-type.h:217
static Quantum PixelPacketIntensity(const PixelPacket *pixel)
Definition: pixel-accessor.h:174
static MagickBooleanType IsPixelGray(const PixelPacket *pixel)
Definition: pixel-accessor.h:158
Definition: magick-type.h:216
static MagickRealType GetPixelLuminance(const Image *restrict image, const PixelPacket *restrict pixel)
Definition: pixel-accessor.h:124
unsigned short Quantum
Definition: magick-type.h:96
Definition: colorspace.h:29
MagickSizeType QuantumAny
Definition: magick-type.h:173
#define QuantumRange
Definition: magick-type.h:97