Magick::Color

Color は、Magick++ の基本色クラスです。これは、ImageMagick の Quantum サイズに合わせてスケーリングされたピクセルの赤、緑、青、およびアルファ値のシンプルなコンテナクラスです。通常、ユーザーは、アプリケーションのニーズに合ったカラーモデルをサポートする Color から派生したクラスをインスタンス化します。Color クラスは、SVG スタイルのカラー文字列から直接構築できます。

Quantum

ImageMagick で色サンプルを表すために使用される基本型は、Quantum 型です。ピクセルは Quantum 値の構造体で表されます。たとえば、RGB ピクセルには赤、緑、青の Quantum が含まれ、RGBA ピクセルには赤、緑、青、および不透明度の Quantum が含まれます。Quantum が取ることができる最大値は、MaxRGB 定義で表される定数値によって指定され、これは Quantum のビット数によって決定されます。QuantumDepth ビルドオプションは、Quantum のビット数を決定します。

Quantum

Quantum は、ImageMagick におけるピクセルの内部表現です。ImageMagick は、Quantum 型の 32、64、または 128 ビットピクセルをサポートするようにコンパイルできます。これは、QuantumDepth 定義の値によって制御されます。デフォルトは 32 ビットピクセル(QuantumDepth=8)であり、最高のパフォーマンスと最小のリソース消費を提供します。さらに高い色の精度または範囲が必要な場合は、ImageMagick を QuantumDepth=16 または QuantumDepth=32 でコンパイルできます。次の表は、QuantumDepth、Quantum の型、および Quantum の全体サイズ間の関係を示しています。

QuantumDepth 値の影響

QuantumDepth

Quantum 型定義

Quantum サイズ

8

unsigned char

32 ビット

16

unsigned short

64 ビット

32

unsigned int

128 ビット

Color クラス

Color 基底クラスは、直接使用することを意図していません。通常、ユーザーは派生クラスを構築するか、このクラスから継承します。Color 引数は、Quantum サイズに合わせてスケーリングする必要があります。Color クラスには Quantum へのポインタが含まれており、これは Color クラスによって割り当てられるか、画像内の既存のピクセルを参照する場合があります。

クラスを構築する別の方法は、SVG 互換のカラー指定文字列(例:Color("red") または Color ("#FF0000"))を使用することです。クラスは文字列から構築できるため、Color への参照を受け入れるメソッドでは、明示的な Color オブジェクトの代わりに便利な文字列を渡すことができます。Color は、ユーザーインターフェイスでの利便性と、設定をテキストファイルに保存するために、std::string に変換することもできます。

(クラス定義は英語のまま。日本語で説明すると長くなるため、必要であれば別途翻訳します。)

Color 派生クラス

ColorRGB

赤、緑、青が比率(0〜1)で指定された RGB 色の表現

ColorGray

比率(0〜1)で指定されたグレースケール sRGB 色(赤、緑、青が均等)の表現

ColorMono

白黒の色(true / false)の表現

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 です。すべての double 引数の有効範囲は 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 色空間)の表現。色引数は「false」(黒ピクセル)と「true」(白ピクセル)に制限されます。

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_ ); 
};