Color.h revision 3ed852eea50f9d4cd633efb8c2b054b8e33c253
13ed852eea50f9d4cd633efb8c2b054b8e33c253cristy// This may look like C code, but it is really -*- C++ -*- 23ed852eea50f9d4cd633efb8c2b054b8e33c253cristy// 33ed852eea50f9d4cd633efb8c2b054b8e33c253cristy// Copyright Bob Friesenhahn, 1999, 2000, 2001, 2002, 2003, 2008 43ed852eea50f9d4cd633efb8c2b054b8e33c253cristy// 53ed852eea50f9d4cd633efb8c2b054b8e33c253cristy// Color Implementation 63ed852eea50f9d4cd633efb8c2b054b8e33c253cristy// 73ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#if !defined (Magick_Color_header) 83ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#define Magick_Color_header 93ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#include "Magick++/Include.h" 113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#include <string> 123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 133ed852eea50f9d4cd633efb8c2b054b8e33c253cristynamespace Magick 143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy class MagickDLLDecl Color; 173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy // Compare two Color objects regardless of LHS/RHS 193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy int MagickDLLDecl operator == ( const Magick::Color& left_, const Magick::Color& right_ ); 203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy int MagickDLLDecl operator != ( const Magick::Color& left_, const Magick::Color& right_ ); 213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy int MagickDLLDecl operator > ( const Magick::Color& left_, const Magick::Color& right_ ); 223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy int MagickDLLDecl operator < ( const Magick::Color& left_, const Magick::Color& right_ ); 233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy int MagickDLLDecl operator >= ( const Magick::Color& left_, const Magick::Color& right_ ); 243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy int MagickDLLDecl operator <= ( const Magick::Color& left_, const Magick::Color& right_ ); 253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy // Base color class stores RGB components scaled to fit Quantum 273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy class MagickDLLDecl Color 283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy public: 303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Color ( Quantum red_, 313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Quantum green_, 323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Quantum blue_ ); 333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Color ( Quantum red_, 343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Quantum green_, 353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Quantum blue_, 363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Quantum alpha_ ); 373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Color ( const std::string &x11color_ ); 383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Color ( const char * x11color_ ); 393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Color ( void ); 403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy virtual ~Color ( void ); 413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Color ( const Color & color_ ); 423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy // Red color (range 0 to MaxRGB) 443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy void redQuantum ( Quantum red_ ); 453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Quantum redQuantum ( void ) const; 463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy // Green color (range 0 to MaxRGB) 483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy void greenQuantum ( Quantum green_ ); 493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Quantum greenQuantum ( void ) const; 503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy // Blue color (range 0 to MaxRGB) 523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy void blueQuantum ( Quantum blue_ ); 533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Quantum blueQuantum ( void ) const; 543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy // Alpha level (range OpaqueOpacity=0 to TransparentOpacity=MaxRGB) 563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy void alphaQuantum ( Quantum alpha_ ); 573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Quantum alphaQuantum ( void ) const; 583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy // Scaled (to 1.0) version of alpha for use in sub-classes 603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy // (range opaque=0 to transparent=1.0) 613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy void alpha ( double alpha_ ); 623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy double alpha ( void ) const; 633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy // Does object contain valid color? 653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy void isValid ( bool valid_ ); 663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy bool isValid ( void ) const; 673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy // Set color via X11 color specification string 693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const Color& operator= ( const std::string &x11color_ ); 703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const Color& operator= ( const char * x11color_ ); 713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy // Assignment operator 733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Color& operator= ( const Color& color_ ); 743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy // Return X11 color specification string 763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* virtual */ operator std::string() const; 773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy // Return ImageMagick PixelPacket 793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy operator PixelPacket() const; 803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy // Construct color via ImageMagick PixelPacket 823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Color ( const PixelPacket &color_ ); 833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy // Set color via ImageMagick PixelPacket 853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const Color& operator= ( const PixelPacket &color_ ); 863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy // 883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy // Public methods beyond this point are for Magick++ use only. 893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy // 903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy // Obtain pixel intensity as a double 923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy double intensity ( void ) const 933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return (0.299*(_pixel->red)+0.587*(_pixel->green)+0.114*(_pixel->blue)); 953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy // Scale a value expressed as a double (0-1) to Quantum range (0-MaxRGB) 983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy static Quantum scaleDoubleToQuantum( const double double_ ) 993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return (static_cast<Magick::Quantum>(double_*MaxRGB)); 1013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 1023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy // Scale a value expressed as a Quantum (0-MaxRGB) to double range (0-1) 1043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy static double scaleQuantumToDouble( const Quantum quantum_ ) 1053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return (static_cast<double>(quantum_)/MaxRGB); 1073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 1083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy static double scaleQuantumToDouble( const double quantum_ ) 1093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return (quantum_/MaxRGB); 1113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 1123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy protected: 1153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy // PixelType specifies the interpretation of PixelPacket members 1173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy // RGBPixel: 1183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy // Red = red; 1193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy // Green = green; 1203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy // Blue = blue; 1213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy // RGBAPixel: 1223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy // Red = red; 1233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy // Green = green; 1243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy // Blue = blue; 1253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy // Alpha = opacity; 1263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy // CYMKPixel: 1273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy // Cyan = red 1283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy // Yellow = green 1293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy // Magenta = blue 1303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy // Black(K) = opacity 1313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy enum PixelType 1323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy RGBPixel, 1343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy RGBAPixel, 1353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy CYMKPixel 1363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy }; 1373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy // Constructor to construct with PixelPacket* 1393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy // Used to point Color at a pixel in an image 1403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Color ( PixelPacket* rep_, PixelType pixelType_ ); 1413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy // Set pixel 1433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy // Used to point Color at a pixel in an image 1443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy void pixel ( PixelPacket* rep_, PixelType pixelType_ ); 1453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy // PixelPacket represents a color pixel: 1473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy // red = red (range 0 to MaxRGB) 1483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy // green = green (range 0 to MaxRGB) 1493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy // blue = blue (range 0 to MaxRGB) 1503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy // opacity = alpha (range OpaqueOpacity=0 to TransparentOpacity=MaxRGB) 1513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy // index = PseudoColor colormap index 1523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy PixelPacket* _pixel; 1533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy private: 1553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy // Common initializer for PixelPacket representation 1573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy void initPixel(); 1583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy // Set true if we allocated pixel 1603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy bool _pixelOwn; 1613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy // Set true if pixel is "valid" 1633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy bool _isValid; 1643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy // Color type supported by _pixel 1663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy PixelType _pixelType; 1673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy }; 1693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy // 1713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy // HSL Colorspace colors 1723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy // 1733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy class MagickDLLDecl ColorHSL : public Color 1743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy public: 1763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ColorHSL ( double hue_, double saturation_, double luminosity_ ); 1773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ColorHSL ( void ); 1783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ColorHSL ( const Color & color_ ); 1793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* virtual */ ~ColorHSL ( ); 1803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy void hue ( double hue_ ); 1823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy double hue ( void ) const; 1833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy void saturation ( double saturation_ ); 1853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy double saturation ( void ) const; 1863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy void luminosity ( double luminosity_ ); 1883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy double luminosity ( void ) const; 1893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy // Assignment operator from base class 1913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ColorHSL& operator= ( const Color& color_ ); 1923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy protected: 1943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy // Constructor to construct with PixelPacket* 1953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ColorHSL ( PixelPacket* rep_, PixelType pixelType_ ); 1963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy }; 1973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy // 1993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy // Grayscale RGB color 2003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy // 2013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy // Grayscale is simply RGB with equal parts of red, green, and blue 2023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy // All double arguments have a valid range of 0.0 - 1.0. 2033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy class MagickDLLDecl ColorGray : public Color 2043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 2053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy public: 2063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ColorGray ( double shade_ ); 2073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ColorGray ( void ); 2083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ColorGray ( const Color & color_ ); 2093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* virtual */ ~ColorGray (); 2103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 2113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy void shade ( double shade_ ); 2123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy double shade ( void ) const; 2133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 2143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy // Assignment operator from base class 2153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ColorGray& operator= ( const Color& color_ ); 2163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 2173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy protected: 2183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy // Constructor to construct with PixelPacket* 2193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ColorGray ( PixelPacket* rep_, PixelType pixelType_ ); 2203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy }; 2213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 2223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy // 2233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy // Monochrome color 2243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy // 2253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy // Color arguments are constrained to 'false' (black pixel) and 'true' 2263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy // (white pixel) 2273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy class MagickDLLDecl ColorMono : public Color 2283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 2293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy public: 2303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ColorMono ( bool mono_ ); 2313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ColorMono ( void ); 2323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ColorMono ( const Color & color_ ); 2333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* virtual */ ~ColorMono (); 2343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 2353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy void mono ( bool mono_ ); 2363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy bool mono ( void ) const; 2373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 2383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy // Assignment operator from base class 2393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ColorMono& operator= ( const Color& color_ ); 2403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 2413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy protected: 2423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy // Constructor to construct with PixelPacket* 2433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ColorMono ( PixelPacket* rep_, PixelType pixelType_ ); 2443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy }; 2453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 2463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy // 2473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy // RGB color 2483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy // 2493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy // All color arguments have a valid range of 0.0 - 1.0. 2503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy class MagickDLLDecl ColorRGB : public Color 2513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 2523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy public: 2533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ColorRGB ( double red_, double green_, double blue_ ); 2543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ColorRGB ( void ); 2553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ColorRGB ( const Color & color_ ); 2563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* virtual */ ~ColorRGB ( void ); 2573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 2583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy void red ( double red_ ); 2593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy double red ( void ) const; 2603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 2613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy void green ( double green_ ); 2623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy double green ( void ) const; 2633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 2643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy void blue ( double blue_ ); 2653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy double blue ( void ) const; 2663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 2673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy // Assignment operator from base class 2683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ColorRGB& operator= ( const Color& color_ ); 2693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 2703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy protected: 2713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy // Constructor to construct with PixelPacket* 2723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ColorRGB ( PixelPacket* rep_, PixelType pixelType_ ); 2733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy }; 2743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 2753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy // 2763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy // YUV Colorspace color 2773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy // 2783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy // Argument ranges: 2793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy // Y: 0.0 through 1.0 2803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy // U: -0.5 through 0.5 2813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy // V: -0.5 through 0.5 2823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy class MagickDLLDecl ColorYUV : public Color 2833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 2843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy public: 2853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ColorYUV ( double y_, double u_, double v_ ); 2863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ColorYUV ( void ); 2873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ColorYUV ( const Color & color_ ); 2883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* virtual */ ~ColorYUV ( void ); 2893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 2903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy void u ( double u_ ); 2913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy double u ( void ) const; 2923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 2933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy void v ( double v_ ); 2943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy double v ( void ) const; 2953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 2963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy void y ( double y_ ); 2973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy double y ( void ) const; 2983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 2993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy // Assignment operator from base class 3003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ColorYUV& operator= ( const Color& color_ ); 3013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 3023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy protected: 3033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy // Constructor to construct with PixelPacket* 3043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ColorYUV ( PixelPacket* rep_, PixelType pixelType_ ); 3053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy }; 3063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} // namespace Magick 3073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 3083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy// 3093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy// Inlines 3103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy// 3113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 3123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy// 3133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy// Color 3143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy// 3153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 3163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy// Common initializer for PixelPacket representation 3173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy// Initialized transparent black 3183ed852eea50f9d4cd633efb8c2b054b8e33c253cristyinline void Magick::Color::initPixel() 3193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 3203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy _pixel->red = 0; 3213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy _pixel->green = 0; 3223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy _pixel->blue = 0; 3233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy _pixel->opacity = TransparentOpacity; 3243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 3253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 3263ed852eea50f9d4cd633efb8c2b054b8e33c253cristyinline void Magick::Color::redQuantum ( Magick::Quantum red_ ) 3273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 3283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy _pixel->red = red_; 3293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy _isValid = true; 3303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 3313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 3323ed852eea50f9d4cd633efb8c2b054b8e33c253cristyinline Magick::Quantum Magick::Color::redQuantum ( void ) const 3333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 3343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return _pixel->red; 3353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 3363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 3373ed852eea50f9d4cd633efb8c2b054b8e33c253cristyinline void Magick::Color::greenQuantum ( Magick::Quantum green_ ) 3383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 3393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy _pixel->green = green_; 3403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy _isValid = true; 3413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 3423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 3433ed852eea50f9d4cd633efb8c2b054b8e33c253cristyinline Magick::Quantum Magick::Color::greenQuantum ( void ) const 3443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 3453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return _pixel->green; 3463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 3473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 3483ed852eea50f9d4cd633efb8c2b054b8e33c253cristyinline void Magick::Color::blueQuantum ( Magick::Quantum blue_ ) 3493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 3503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy _pixel->blue = blue_; 3513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy _isValid = true; 3523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 3533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 3543ed852eea50f9d4cd633efb8c2b054b8e33c253cristyinline Magick::Quantum Magick::Color::blueQuantum ( void ) const 3553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 3563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return _pixel->blue; 3573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 3583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 3593ed852eea50f9d4cd633efb8c2b054b8e33c253cristyinline void Magick::Color::alphaQuantum ( Magick::Quantum alpha_ ) 3603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 3613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy _pixel->opacity = alpha_; 3623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy _isValid = true ; 3633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 3643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 3653ed852eea50f9d4cd633efb8c2b054b8e33c253cristyinline Magick::Quantum Magick::Color::alphaQuantum ( void ) const 3663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 3673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return _pixel->opacity; 3683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 3693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 3703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy// Return ImageMagick PixelPacket struct based on color. 3713ed852eea50f9d4cd633efb8c2b054b8e33c253cristyinline Magick::Color::operator MagickCore::PixelPacket () const 3723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 3733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return *_pixel; 3743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 3753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 3763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy// Scaled version of alpha for use in sub-classes 3773ed852eea50f9d4cd633efb8c2b054b8e33c253cristyinline void Magick::Color::alpha ( double alpha_ ) 3783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 3793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy alphaQuantum( scaleDoubleToQuantum(alpha_) ); 3803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 3813ed852eea50f9d4cd633efb8c2b054b8e33c253cristyinline double Magick::Color::alpha ( void ) const 3823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 3833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return scaleQuantumToDouble( alphaQuantum() ); 3843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 3853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 3863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy// 3873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy// ColorHSL 3883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy// 3893ed852eea50f9d4cd633efb8c2b054b8e33c253cristyinline Magick::ColorHSL::ColorHSL ( Magick::PixelPacket* rep_, 3903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Magick::Color::PixelType pixelType_ ) 3913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy: Color( rep_, pixelType_ ) 3923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 3933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 3943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 3953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy// 3963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy// ColorGray 3973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy// 3983ed852eea50f9d4cd633efb8c2b054b8e33c253cristyinline Magick::ColorGray::ColorGray ( Magick::PixelPacket* rep_, 3993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Magick::Color::PixelType pixelType_ ) 4003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy: Color( rep_, pixelType_ ) 4013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 4023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 4033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 4043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy// 4053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy// ColorMono 4063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy// 4073ed852eea50f9d4cd633efb8c2b054b8e33c253cristyinline Magick::ColorMono::ColorMono ( Magick::PixelPacket* rep_, 4083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Magick::Color::PixelType pixelType_ ) 4093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy : Color( rep_, pixelType_ ) 4103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 4113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 4123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 4133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy// 4143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy// ColorRGB 4153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy// 4163ed852eea50f9d4cd633efb8c2b054b8e33c253cristyinline Magick::ColorRGB::ColorRGB ( Magick::PixelPacket* rep_, 4173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Magick::Color::PixelType pixelType_ ) 4183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy : Color( rep_, pixelType_ ) 4193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 4203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 4213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 4223ed852eea50f9d4cd633efb8c2b054b8e33c253cristyinline void Magick::ColorRGB::red ( double red_ ) 4233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 4243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy redQuantum( scaleDoubleToQuantum(red_) ); 4253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 4263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 4273ed852eea50f9d4cd633efb8c2b054b8e33c253cristyinline double Magick::ColorRGB::red ( void ) const 4283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 4293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return scaleQuantumToDouble( redQuantum() ); 4303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 4313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 4323ed852eea50f9d4cd633efb8c2b054b8e33c253cristyinline void Magick::ColorRGB::green ( double green_ ) 4333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 4343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy greenQuantum( scaleDoubleToQuantum(green_) ); 4353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 4363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 4373ed852eea50f9d4cd633efb8c2b054b8e33c253cristyinline double Magick::ColorRGB::green ( void ) const 4383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 4393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return scaleQuantumToDouble( greenQuantum() ); 4403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 4413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 4423ed852eea50f9d4cd633efb8c2b054b8e33c253cristyinline void Magick::ColorRGB::blue ( double blue_ ) 4433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 4443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy blueQuantum( scaleDoubleToQuantum(blue_) ); 4453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 4463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 4473ed852eea50f9d4cd633efb8c2b054b8e33c253cristyinline double Magick::ColorRGB::blue ( void ) const 4483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 4493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return scaleQuantumToDouble( blueQuantum() ); 4503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 4513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 4523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy// 4533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy// ColorYUV 4543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy// 4553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 4563ed852eea50f9d4cd633efb8c2b054b8e33c253cristyinline Magick::ColorYUV::ColorYUV ( Magick::PixelPacket* rep_, 4573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Magick::Color::PixelType pixelType_ ) 4583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy : Color( rep_, pixelType_ ) 4593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 4603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 4613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 4623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#endif // Magick_Color_header 463