色相・彩度・明度「色の編集」ダイアログボックスなどでは RGB 値以外に、「色合い」「鮮やかさ」「明るさ」による色の指定が可能です。
HSB
カラーモデルHSB カラーモデルとは、色相(Hue)、彩度(Saturation)、明度(Brightness)*1の三要素からなる色の表現方法のことです。Visual Basic などで採用されている RGB カラーモデルよりも人間の色覚に合っており、実用的な画像処理
プログラムならば備えておくべき機能と言えるでしょう。
色相 (Hue) 赤・黄・緑・青・紫といった「色合い」を表します*2。色相を環状に配置し、スペクトルの両端である赤と紫が滑らかにつながるようにしたものが色相環(Hue circle)です。
色相は色相環上で赤を基準として反時計回りに0~360°の範囲で指定します。
彩度(Saturation) 色の「鮮やかさ」の度合いです。色相でした色合いの強弱のことで、彩度が高ければより鮮やかに、低ければ濁った色(グレー)となります。その色相の中でもっとも彩度の高い色のことを、特に純色(Pure color)と呼びます。
彩度の値範囲は0~100%です。
明度(Brightness)色の明暗、つまり「明るさ」の要素が明度です。明度が最大(100%)の場合には白、最も暗くなる(0%)と黒となり、いずれの場合にしても色相・彩度が関係なくなります。下図は無彩色での明度を示すスケールです。
Visual Basic からの利用Windows 2000 (IE 5.0) 以降の環境では ColorRGBToHLS / ColorHLSToRGB 関数といった API 関数を利用することができます。
Declare Sub ColorRGBToHLS Lib "SHLWAPI" ( _
ByVal clrRGB As Long, _
ByRef pwHue As Integer, _
ByRef pwLuminance As Integer, _
ByRef pwSaturation As Integer _
)
Declare Function ColorHLSToRGB Lib "SHLWAPI" ( _
ByVal wHue As Integer, _
ByVal wLuminance As Integer, _
ByVal wSaturation As Integer _
) As Long
この2つの関数は色相・彩度・明度の取り得る値が0~240なので注意してください。
MSDN ライブラリ Knowledge Base #29240 に "Converting Colors Between RGB and HLS (HBS)" としてアルゴリズムが載っています(C言語ですが)ので、自分で実装することも可能です。
Note.*1 明度を Luminance または Lightness として HLS カラーモデルと呼ぶ場合もありますが、同じモノです。
2 当然の事ながら無彩色(彩度が0であるような色、つまりグレースケールカラーのこと)には色相はありません。
3 MSDN ライブラリで紹介されているのとは別のアルゴリズムを使用しています。興味のある方は比べてみてください。
Color 構造体
.NET Framework 4.5
ARGB (アルファ、赤、緑、青) カラーを表します。
名前空間: System.Drawing
アセンブリ: System.Drawing (System.Drawing.dll 内)
構文
VB
'宣言
<SerializableAttribute> _
<TypeConverterAttribute(GetType(ColorConverter))> _
Public Structure Color
Color 型で公開されるメンバーは以下のとおりです。
プロパティ
A
この Color 構造体のアルファ コンポーネントの値を取得します。
B
この Color 構造体の青のコンポーネントの値を取得します。
G
この Color 構造体の緑のコンポーネントの値を取得します。
IsEmpty
この Color 構造体を初期化するかどうかを指定します
IsKnownColor
この Color 構造体が定義済みの色かどうかを示す値を取得します。定義済みの色は KnownColor 列挙体の要素によって表されます。
IsNamedColor
この Color 構造体が名前付きの色であるかまたは KnownColor 列挙体のメンバーであるかを示す値を取得します。
IsSystemColor
この Color 構造体がシステム カラーかどうかを示す値を取得します。システム カラーとは、Windows の表示要素に使用される色です。システム カラーは KnownColor 列挙体の要素によって表されます。
Name
この Color の名前を取得します。
R
この Color 構造体の赤のコンポーネントの値を取得します。
Transparent
システム定義色を取得します。
メソッド
Equals
指定されたオブジェクトが Color 構造体かどうか、また、この Color 構造体と等価かどうかをテストします。 (ValueType.Equals(Object) をオーバーライドします。)
FromArgb(Int32)
32 ビットの ARGB 値から Color 構造体を作成します。
FromArgb(Int32, Color)
指定の新しいアルファ値を使用して、指定の Color 構造体から Color 構造体を作成します。このメソッドでは、アルファ値として 32 ビット値を渡すことができますが、有効な値は 8 ビットに制限されています。
FromArgb(Int32, Int32, Int32)
指定の 8 ビット カラー値 (赤、緑、青) から Color 構造体を作成します。アルファ値は暗黙的に 255 (完全不透明) になります。このメソッドでは、各カラー コンポーネントとして 32 ビット値を渡すことができますが、各コンポーネントの値は 8 ビットに制限されています。
FromArgb(Int32, Int32, Int32, Int32)
4 つの ARGB コンポーネント (アルファ、赤、緑、青) 値から Color 構造体を作成します。このメソッドでは、各コンポーネントとして 32 ビット値を渡すことができますが、各コンポーネントの値は 8 ビットに制限されています。
FromKnownColor
指定した定義済みの色から Color 構造体を作成します。
FromName
定義済みの色の指定した名前から Color 構造体を作成します。
GetBrightness
この Color 構造体の、HSB (hue-saturation-brightness) の明るさの値を取得します。
GetHashCode
この Color 構造体のハッシュ コードを返します。 (ValueType.GetHashCode をオーバーライドします。)
GetHue
この Color 構造体の HSB の色合いの値 (度) を取得します。
GetSaturation
この Color 構造体の HSB の鮮やかさの値を取得します。
GetType
現在のインスタンスの Type を取得します。 (Object から継承されます。)
ToArgb
この Color 構造体の 32 ビットの ARGB 値を取得します。
ToKnownColor
この Color 構造体の KnownColor 値を取得します。
ToString
この Color 構造体をユーザーが判読できる文字列に変換します。 (ValueType.ToString をオーバーライドします。)
XNA Framework3.0では、このメンバーは Object..::..ToString から継承されています.ToString.
演算子
Equality
指定の 2 つの Color 構造体が等価かどうかをテストします。
Inequality
指定した 2 つの Color 構造体が異なるかどうかをテストします。
フィールド
Empty
null 参照 (Visual Basic では Nothing) である色を表します。
解説
名前付きの色は、Color 構造体のプロパティを使用して表されます。これらの色の詳細については、「Colors by Name (色の一覧 - 名前順)」を参照してください。
各ピクセルの色は、アルファ、赤、緑、青 (ARGB) にそれぞれ 8 ビットの、32 ビットの数値で表現されます。4 つの各要素は、0 から 255 までの数値で表され、0 は輝度がないことを表し、255 は最大の輝度を表します。アルファ要素は、色の透明度を指定します。0 は完全な透明を表し、255 は完全な不透明を表します。アルファ、赤、緑、または青の各色の要素を決定するには、それぞれ A、R、G、または B の各プロパティを使用します。いずれかの FromArgb メソッドを使用して、カスタム カラーを作成できます。
例
Color の A プロパティ、R プロパティ、G プロパティ、B プロパティ、および Widening メンバーを使ったコード例を次に示します。
この例は、Windows フォームでの使用を意図してデザインされています。コードをフォームに貼り付け、フォームの Paint イベント処理メソッドから PaintEventArgs の e を渡して ShowPropertiesOfSlateBlue メソッドを呼び出します。
VB
Private Sub ShowPropertiesOfSlateBlue(ByVal e As PaintEventArgs)
Dim slateBlue As Color = Color.FromName("SlateBlue")
Dim g As Byte = slateBlue.G
Dim b As Byte = slateBlue.B
Dim r As Byte = slateBlue.R
Dim a As Byte = slateBlue.A
Dim text As String = _
String.Format("Slate Blue has these ARGB values: Alpha:{0}, " _
& "red:{1}, green: {2}, blue {3}", New Object() {a, r, g, b})
e.Graphics.DrawString(text, New Font(Me.Font, FontStyle.Italic), _
New SolidBrush(slateBlue), _
New RectangleF(New PointF(0.0F, 0.0F), _
Size.op_Implicit(Me.Size)))
End Sub
バージョン情報
.NET Framework
サポート対象 : 4.5、4、3.5、3.0、2.0、1.1、1.0
.NET Framework Client Profile
サポート対象 : 4、3.5 SP1
プラットフォーム
Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (サーバー コア ロールはサポート対象外), Windows Server 2008 R2 (SP1 以降でサーバー コア ロールをサポート。Itanium はサポート対象外)
.NET Framework では、各プラットフォームのすべてのバージョンはサポートしていません。サポートされているバージョンについては、「.NET Framework システム要件」を参照してください。
スレッド セーフ
この型のすべてのパブリック static (Visual Basic では Shared) メンバーは、スレッド セーフです。インスタンス メンバーの場合は、スレッド セーフであるとは限りません。
参照
関連項目
System.Drawing 名前空間
その他の技術情報
イメージの色の変更
最終更新:2013年03月23日 16:25