Magick++  7.0.7
Convert, Edit, Or Compose Bitmap Images
Color.h
Go to the documentation of this file.
1 // This may look like C code, but it is really -*- C++ -*-
2 //
3 // Copyright Bob Friesenhahn, 1999, 2000, 2001, 2002, 2003, 2008
4 // Copyright Dirk Lemstra 2013-2014
5 //
6 // Color Implementation
7 //
8 #if !defined (Magick_Color_header)
9 #define Magick_Color_header
10 
11 #include "Magick++/Include.h"
12 #include <string>
13 
14 namespace Magick
15 {
17 
18  // Compare two Color objects regardless of LHS/RHS
19  MagickPPExport int operator ==
20  (const Magick::Color& left_,const Magick::Color& right_);
21  MagickPPExport int operator !=
22  (const Magick::Color& left_,const Magick::Color& right_);
23  MagickPPExport int operator >
24  (const Magick::Color& left_,const Magick::Color& right_);
25  MagickPPExport int operator <
26  (const Magick::Color& left_,const Magick::Color& right_);
27  MagickPPExport int operator >=
28  (const Magick::Color& left_,const Magick::Color& right_);
29  MagickPPExport int operator <=
30  (const Magick::Color& left_,const Magick::Color& right_);
31 
32  // Base color class stores RGBA components scaled to fit Quantum
33  // All double arguments have a valid range of 0.0 - 1.0.
35  {
36  public:
37 
38  // PixelType specifies the interpretation of PixelInfo members
39  // CYMKPixel:
40  // Cyan = red
41  // Magenta = green
42  // Yellow = blue
43  // Black(K) = black
44  // CYMKPixel:
45  // Cyan = red
46  // Magenta = green
47  // Yellow = blue
48  // Black(K) = black
49  // Alpha = alpha
50  // RGBPixel:
51  // Red = red;
52  // Green = green;
53  // Blue = blue;
54  // RGBAPixel:
55  // Red = red;
56  // Green = green;
57  // Blue = blue;
58  // Alpha = alpha;
59  enum PixelType
60  {
64  RGBAPixel
65  };
66 
67  // Default constructor
68  Color(void);
69 
70  // Construct Color using the specified RGB values
71  Color(const Magick::Quantum red_,const Magick::Quantum green_,
72  const Magick::Quantum blue_);
73 
74  // Construct Color using the specified RGBA values
75  Color(const Magick::Quantum red_,const Magick::Quantum green_,
76  const Magick::Quantum blue_,const Magick::Quantum alpha_);
77 
78  // Construct Color using the specified CMYKA values
79  Color(const Magick::Quantum cyan_,const Magick::Quantum magenta_,
80  const Magick::Quantum yellow_,const Magick::Quantum black_,
81  const Magick::Quantum alpha_);
82 
83  // Construct Color using the specified color string
84  Color(const char *color_);
85 
86  // Copy constructor
87  Color(const Color &color_);
88 
89  // Construct color via ImageMagick PixelInfo
90  Color(const PixelInfo &color_);
91 
92  // Constructor Color using the specified color string
93  Color(const std::string &color_);
94 
95  // Destructor
96  virtual ~Color(void);
97 
98  // Assignment operator
99  Color& operator=(const Color &color_);
100 
101  // Set color via X11 color specification string
102  const Color& operator=(const char *color);
103 
104  // Set color via ImageMagick PixelInfo
105  const Color& operator=(const PixelInfo &color_);
106 
107  // Set color via color specification string
108  const Color& operator=(const std::string &color);
109 
110  // Return ImageMagick PixelInfo
111  operator PixelInfo() const;
112 
113  // Return color specification string
114  operator std::string() const;
115 
116  // Returns true if the distance between the other color is less than the
117  // specified distance in a linear three(or four) % dimensional color space.
118  bool isFuzzyEquivalent(const Color &color_,const double fuzz_) const;
119 
120  // Does object contain valid color?
121  void isValid(const bool valid_);
122  bool isValid(void) const;
123 
124  // Returns pixel type of the color
125  Magick::Color::PixelType pixelType(void) const;
126 
127  // Alpha level (range OpaqueAlpha=0 to TransparentAlpha=QuantumRange)
128  void quantumAlpha(const Quantum alpha_);
129  Quantum quantumAlpha(void) const;
130 
131  // Black color (range 0 to QuantumRange)
132  void quantumBlack(const Quantum black_);
133  Quantum quantumBlack(void) const;
134 
135  // Blue/Yellow color (range 0 to QuantumRange)
136  void quantumBlue(const Quantum blue_);
137  Quantum quantumBlue(void) const;
138 
139  // Green/Magenta color (range 0 to QuantumRange)
140  void quantumGreen(const Quantum green_);
141  Quantum quantumGreen(void) const;
142 
143  // Red/Cyan color (range 0 to QuantumRange)
144  void quantumRed(const Quantum red_);
145  Quantum quantumRed(void) const;
146 
147  protected:
148 
149  // Constructor to construct with PixelInfo*
150  // Used to point Color at a pixel in an image
151  Color(PixelInfo *rep_,PixelType pixelType_);
152 
153  // Constructor to construct with PixelType
154  Color(PixelType pixelType_);
155 
156  // Set pixel
157  // Used to point Color at a pixel in an image
158  void pixel(PixelInfo *rep_,PixelType pixelType_);
159 
160  // Scale a value expressed as a double (0-1) to Quantum range (0-QuantumRange)
161  static Quantum scaleDoubleToQuantum(const double double_);
162 
163  // Scale a value expressed as a Quantum (0-QuantumRange) to double range (0-1)
164  static double scaleQuantumToDouble(const Quantum quantum_);
165 
166  // PixelInfo represents a color pixel:
167  // red = red (range 0 to QuantumRange)
168  // green = green (range 0 to QuantumRange)
169  // blue = blue (range 0 to QuantumRange)
170  // alpha = alpha (range OpaqueAlpha=0 to TransparentAlpha=QuantumRange)
171  // index = PseudoColor colormap index
172  PixelInfo *_pixel;
173 
174  private:
175 
176  bool _isValid; // Set true if pixel is "valid"
177  bool _pixelOwn; // Set true if we allocated pixel
178  PixelType _pixelType; // Color type supported by _pixel
179 
180  // Common initializer for PixelInfo representation
181  void initPixel();
182 
183  // Sets the pixel type using the specified PixelInfo.
184  void setPixelType(const PixelInfo &color_);
185  };
186 
188  {
189  public:
190 
191  // Default constructor
192  ColorCMYK(void);
193 
194  // Copy constructor
195  ColorCMYK(const Color &color_);
196 
197  // Construct ColorCMYK using the specified CMYK values
198  ColorCMYK(const double cyan_,const double magenta_,const double yellow_,
199  const double black_);
200 
201  // Construct ColorCMYK using the specified CMYKA values
202  ColorCMYK(const double cyan_,const double magenta_,const double yellow_,
203  const double black_,const double alpha_);
204 
205  // Destructor
206  ~ColorCMYK(void);
207 
208  // Assignment operator from base class
209  ColorCMYK& operator=(const Color& color_);
210 
211  // Alpha level (range 0 to 1.0)
212  void alpha(const double alpha_);
213  double alpha(void) const;
214 
215  // Black/Key color (range 0 to 1.0)
216  void black(const double black_);
217  double black(void) const;
218 
219  // Black/Key color (range 0.0 to 1.0)
220  void cyan(const double cyan_);
221  double cyan(void) const;
222 
223  // Magenta color (range 0 to 1.0)
224  void magenta(const double magenta_);
225  double magenta(void) const;
226 
227  // Yellow color (range 0 to 1.0)
228  void yellow(const double yellow_);
229  double yellow(void) const;
230 
231  protected:
232 
233  // Constructor to construct with PixelInfo*
234  ColorCMYK(PixelInfo *rep_,PixelType pixelType_);
235  };
236 
237  //
238  // Grayscale RGB color
239  //
240  // Grayscale is simply RGB with equal parts of red, green, and blue
241  // All double arguments have a valid range of 0.0 - 1.0.
243  {
244  public:
245 
246  // Default constructor
247  ColorGray(void);
248 
249  // Copy constructor
250  ColorGray(const Color &color_);
251 
252  // Construct ColorGray using the specified shade
253  ColorGray(const double shade_);
254 
255  // Destructor
256  ~ColorGray();
257 
258  // Shade
259  void shade(const double shade_);
260  double shade(void) const;
261 
262  // Assignment operator from base class
263  ColorGray& operator=(const Color& color_);
264 
265  protected:
266 
267  // Constructor to construct with PixelInfo*
268  ColorGray(PixelInfo *rep_,PixelType pixelType_);
269  };
270 
271  //
272  // HSL Colorspace colors
273  //
274  // All double arguments have a valid range of 0.0 - 1.0.
276  {
277  public:
278 
279  // Default constructor
280  ColorHSL(void);
281 
282  // Copy constructor
283  ColorHSL(const Color &color_);
284 
285  // Construct ColorHSL using the specified HSL values
286  ColorHSL(const double hue_,const double saturation_,
287  const double lightness_);
288 
289  // Destructor
290  ~ColorHSL();
291 
292  // Assignment operator from base class
293  ColorHSL& operator=(const Color& color_);
294 
295  // Hue color
296  void hue(const double hue_);
297  double hue(void) const;
298 
299  // Lightness color
300  void lightness(const double lightness_);
301  double lightness(void) const;
302 
303  // Saturation color
304  void saturation(const double saturation_);
305  double saturation(void) const;
306 
307  protected:
308 
309  // Constructor to construct with PixelInfo*
310  ColorHSL(PixelInfo *rep_,PixelType pixelType_);
311  };
312 
313  //
314  // Monochrome color
315  //
316  // Color arguments are constrained to 'false' (black pixel) and 'true'
317  // (white pixel)
319  {
320  public:
321 
322  // Default constructor
323  ColorMono(void);
324 
325  // Construct ColorMono (false=black, true=white)
326  ColorMono(const bool mono_);
327 
328  // Copy constructor
329  ColorMono(const Color &color_);
330 
331  // Destructor
332  ~ColorMono();
333 
334  // Assignment operator from base class
335  ColorMono& operator=(const Color& color_);
336 
337  // Mono color
338  void mono(const bool mono_);
339  bool mono(void) const;
340 
341  protected:
342 
343  // Constructor to construct with PixelInfo*
344  ColorMono(PixelInfo* rep_,PixelType pixelType_);
345  };
346 
348  {
349  public:
350 
351  // Default constructor
352  ColorRGB(void);
353 
354  // Copy constructor
355  ColorRGB(const Color &color_);
356 
357  // Construct ColorRGB using the specified RGB values
358  ColorRGB(const double red_,const double green_,const double blue_);
359 
360  // Construct ColorRGB using the specified RGBA values
361  ColorRGB(const double red_,const double green_,const double blue_,
362  const double alpha_);
363 
364  // Destructor
365  ~ColorRGB(void);
366 
367  // Assignment operator from base class
368  ColorRGB& operator=(const Color& color_);
369 
370  // Alpha level (range 0 to 1.0)
371  void alpha(const double alpha_);
372  double alpha(void) const;
373 
374  // Blue color (range 0.0 to 1.0)
375  void blue(const double blue_);
376  double blue(void) const;
377 
378  // Green color (range 0 to 1.0)
379  void green(const double green_);
380  double green(void) const;
381 
382  // Red color (range 0 to 1.0)
383  void red(const double red_);
384  double red(void) const;
385 
386  protected:
387 
388  // Constructor to construct with PixelInfo*
389  ColorRGB(PixelInfo *rep_,PixelType pixelType_);
390  };
391 
392  //
393  // YUV Colorspace color
394  //
395  // Argument ranges:
396  // Y: 0.0 through 1.0
397  // U: -0.5 through 0.5
398  // V: -0.5 through 0.5
400  {
401  public:
402 
403  // Default constructor
404  ColorYUV(void);
405 
406  // Copy constructor
407  ColorYUV(const Color &color_);
408 
409  // Construct ColorYUV using the specified YUV values
410  ColorYUV(const double y_,const double u_,const double v_);
411 
412  // Destructor
413  ~ColorYUV(void);
414 
415  // Assignment operator from base class
416  ColorYUV& operator=(const Color& color_);
417 
418  // Color U (0.0 through 1.0)
419  void u(const double u_);
420  double u(void) const;
421 
422  // Color V (-0.5 through 0.5)
423  void v(const double v_);
424  double v(void) const;
425 
426  // Color Y (-0.5 through 0.5)
427  void y(const double y_);
428  double y(void) const;
429 
430  protected:
431 
432  // Constructor to construct with PixelInfo*
433  ColorYUV(PixelInfo *rep_,PixelType pixelType_);
434 
435  private:
436 
437  void convert(const double y_,const double u_,const double v_);
438 
439  };
440 } // namespace Magick
441 
442 #endif // Magick_Color_header
class MagickPPExport Color
Definition: Color.h:16
#define MagickPPExport
Definition: Include.h:268
PixelInfo * _pixel
Definition: Color.h:172
Definition: Blob.h:15