Magick::Color

Color 是 Magick++ 中的基本顏色類別。它是一個簡單的容器類別,用於儲存像素的紅、綠、藍和 Alpha 值,這些值會縮放到適合 ImageMagick 的 Quantum 大小。通常使用者會實例化從 Color 衍生的類別,這些類別支援符合應用程式需求的色彩模型。Color 類別可以直接從 SVG 風格的色彩字串建構。

Quantum

在 ImageMagick 中用於表示色彩樣本的基本類型是 Quantum 類型。像素由 Quantum 值的結構表示。例如,RGB 像素包含紅色、綠色和藍色量子,而 RGBA 像素包含紅色、綠色、藍色和不透明度量子。Quantum 可以達到的最大值由 MaxRGB 定義的常數值指定,該值本身由 Quantum 中的位元數決定。QuantumDepth 建置選項決定了 Quantum 中的位元數。

Quantum

Quantum 是 ImageMagick 中像素的內部表示。可以將 ImageMagick 編譯為支援 32、64 或 128 位元的 Quantum 類型像素。這由 QuantumDepth 定義的值控制。預設值為 32 位元像素 (QuantumDepth=8),它提供最佳效能和最低資源消耗。如果需要額外的色彩精度或範圍,則可以使用 QuantumDepth=16 或 QuantumDepth=32 編譯 ImageMagick。下表顯示了 QuantumDepth、Quantum 類型和整體 Quantum 大小之間的關係。

QuantumDepth 值的影響

QuantumDepth

Quantum 類型定義

Quantum 大小

8

unsigned char

32 位元

16

unsigned short

64 位元

32

unsigned int

128 位元

Color 類別

Color 基礎類別不打算直接使用。通常,使用者會建構衍生類別或從此類別繼承。色彩參數必須縮放到適合 Quantum 大小。Color 類別包含指向 Quantum 的指標,該指標可以由 Color 類別分配,也可以引用影像中的現有像素。

建構類別的另一種方法是透過與 SVG 相容的色彩規範字串(例如 Color("red") 或 Color ("#FF0000"))。由於可以從字串建構類別,因此可以在接受 Color 參考的方法中傳遞方便的字串來代替明確的 Color 物件。為了方便使用者介面以及將設定儲存到文字檔中,也可以將 Color 轉換為 std::string。

class Color { public: Color ( Quantum red_, Quantum green_, Quantum blue_ ); Color ( Quantum red_, Quantum green_, Quantum blue_, Quantum alpha_ ); Color ( const std::string &svgColor_ ); Color ( const char * svgColor_ ); Color ( void ); virtual ~Color ( void ); Color ( const Color & color_ ); // 紅色 (範圍 0 到 MaxRGB) void redQuantum ( Quantum red_ ); Quantum redQuantum ( void ) const; // 綠色 (範圍 0 到 MaxRGB) void greenQuantum ( Quantum green_ ); Quantum greenQuantum ( void ) const; // 藍色 (範圍 0 到 MaxRGB) void blueQuantum ( Quantum blue_ ); Quantum blueQuantum ( void ) const; // Alpha 色板 (範圍 OpaqueOpacity=0 到 TransparentOpacity=MaxRGB) void alphaQuantum ( Quantum alpha_ ); Quantum alphaQuantum ( void ) const; // 子類別使用的縮放後 alpha 版本 (範圍 opaque=0 到 transparent=1.0) void alpha ( double alpha_ ); double alpha ( void ) const; // 物件是否包含有效的顏色? void isValid ( bool valid_ ); bool isValid ( void ) const; // 透過 SVG 顏色規範字串設定顏色 const Color& operator= ( const std::string & svgColor_ ); const Color& operator= ( const char * svgColor_ ); // 指派運算子 Color& operator= ( const Color& color_ ); // 傳回 SVG 顏色規範字串 /* virtual */ operator std::string() const; // 傳回 ImageMagick Quantum operator Quantum() const; // 透過 ImageMagick Quantum 建構顏色 Color ( const Quantum &color_ ); // 透過 ImageMagick Quantum 設定顏色 const Color& operator= ( Quantum &color_ ); };

Color 衍生類別

ColorRGB

以紅色、綠色和藍色指定為比率 (0 到 1) 的 RGB 顏色表示法

ColorGray

以比率 (0 到 1) 指定的灰階 sRGB 顏色(紅色、綠色和藍色比例相等)表示法

ColorMono

黑白顏色(真/假)的表示法

ColorYUV

YUV 色彩空間中顏色的表示法

ColorRGB

sRGB 顏色的表示法。所有顏色參數的有效範圍為 0.0 - 1.0。

class ColorRGB : public Color 
{ 
  public: 
    ColorRGB ( double red_, double green_, double blue_ ); 
    ColorRGB ( void ); 
    ColorRGB ( const Color & color_ ); 
    /* virtual */  ~ColorRGB ( void ); 
  
    void           red ( double red_ ); 
    double         red ( void ) const; 
  
    void           green ( double green_ ); 
    double         green ( void ) const; 
  
    void           blue ( double blue_ ); 
    double         blue ( void ) const;

    // Assignment operator from base class 
    ColorRGB& operator= ( const Color& color_ ); 
}; 

ColorGray

灰階顏色(線性色彩空間中)的表示法。灰階僅僅是 RGB 中紅色、綠色和藍色比例相等的顏色。所有雙精度浮點數參數的有效範圍為 0.0 - 1.0。

class ColorGray : public Color 
{ 
  public: 
    ColorGray ( double shade_ ); 
    ColorGray ( void ); 
    ColorGray ( const Color & color_ ); 
    /* virtual */ ~ColorGray ();

    void           shade ( double shade_ ); 
    double         shade ( void ) const;

    // Assignment operator from base class 
    ColorGray& operator= ( const Color& color_ ); 
}; 

ColorMono

黑白像素(RGB 色彩空間中)的表示法。顏色參數限制為「假」(黑色像素)和「真」(白色像素)。

class ColorMono : public Color 
{ 
  public: 
    ColorMono ( bool mono_ ); 
    ColorMono ( void ); 
    ColorMono ( const Color & color_ ); 
    /* virtual */ ~ColorMono (); 
  
    void           mono ( bool mono_ ); 
    bool           mono ( void ) const;

    // Assignment operator from base class 
    ColorMono& operator= ( const Color& color_ ); 
}; 

ColorHSL

色彩在色相/飽和度/亮度 (HSL) 色彩空間中的表示法。

class ColorHSL : public Color 
{ 
  public: 
    ColorHSL ( double hue_, double saturation_, double luminosity_ ); 
    ColorHSL ( void ); 
    ColorHSL ( const Color & color_ ); 
    /* virtual */  ~ColorHSL ( ); 
  
    void           hue ( double hue_ ); 
    double         hue ( void ) const; 
  
    void           saturation ( double saturation_ ); 
    double         saturation ( void ) const; 
  
    void           luminosity ( double luminosity_ ); 
    double         luminosity ( void ) const;

    // Assignment operator from base class 
    ColorHSL& operator= ( const Color& color_ ); 
}; 

ColorYUV

YUV 色彩空間中顏色的表示法(用於編碼電視傳輸的顏色)。

參數範圍

Y:0.0 到 1.0
U:-0.5 到 0.5
V:-0.5 到 0.5
class ColorYUV : public Color 
{ 
  public: 
    ColorYUV ( double y_, double u_, double v_ ); 
    ColorYUV ( void ); 
    ColorYUV ( const Color & color_ ); 
    /* virtual */ ~ColorYUV ( void ); 
  
    void           u ( double u_ ); 
    double         u ( void ) const; 
  
    void           v ( double v_ ); 
    double         v ( void ) const; 
  
    void           y ( double y_ ); 
    double         y ( void ) const;

    // Assignment operator from base class 
    ColorYUV& operator= ( const Color& color_ ); 
};