LNS003 Color拡張

Colorの機能を少し拡張します。





基本情報

前提スクリプト


挿入位置



説明

概要

通常(red, green, blue, alpha)で定義される Color クラスに対して、(hue, saturation, lightness)で定義される HSL_Color クラスと、(hue, saturation, value)で定義される HSV_Color クラスを追加します。

使い方

 HSL_Color と HSV_Color は Color のサブクラスです。つまり、Bitmap#draw_text などの、Color を引数に取る RGSS3組み込みメソッドに対応しています。

HSL と HSV は、色の明るさ(Lightness, Value)をどう表すかで異なります。
  • HSL の場合、輝度(Lightness)が 0.5 のとき原色で、0 で黒、1.0 で白になります。
  • HSV の場合、彩度(Saturation)によって明度(Value)の意味が決まります。
    • 彩度が 1 の場合:明度が 1 のとき原色で、0 で黒になります。
    • 彩度が 0 の場合:明度が 1 のとき 白 で、0 で黒になります。
詳しくはこのあたりをご参照ください。

Color からの変換には、例えば以下の様な方法があります。
color = Color.new(255, 0, 0)
p color2 = HSL_Color.new(color)   #=> HSL(0.0, 1.0, 0.5, 255.0)
ただし、red=() などプロパティを直接設定するメソッドには追従しません。
color2.red = 0
p color2            #=> HSL(0.0, 1.0, 0.5, 255.0)
                        (HSL(0.0, 0.0, 0.0, 255.0) を期待するが……)
RGB値を指定して色相などを変更したい場合、その都度 Color を用意してください。
color1 = Color.new(color2)
color1.red = 0
p HSL_Color.new(color1)  #=> HSL(0.0, 0.0, 0.0, 255.0)

用途

例えばLNS007a レーダーグラフでは、グラフ色にHSL Colorを指定した場合、RGB値ではなくHSL値を変化させて中間色を得ます。すなわち、
GRAPH_COLOR[:max] = Color.new(255, 255,   0)
GRAPH_COLOR[:mid] = Color.new(  0,   0, 255)
とした場合、:max と :mid のちょうど中間では両者の成分が平均化され
RGB(127.5, 127.5, 127.5)
という完全な灰色になってしまいます。もし以下のように設定すれば、
GRAPH_COLOR[:max] = HSL_Color.new( 60, 1.0, 0.5)
GRAPH_COLOR[:mid] = HSL_Color.new(240, 1.0, 0.5)
中間色は以下のようになります。
HSL(150, 1.0, 0.5) #=> RGB(   0, 255, 128)

なお、Bitmap#gradient_fill_rect は残念ながらRGBにしか対応していないのでこの方法は意味がありません。


備考

再定義されるメソッド

  • Color#to_s
RGBカラーであることが分かりやすいように、"RGB(0.0, 0.0, 0.0)"の形式で出力されます。

上記のメソッドを拡張するスクリプトはこれよりも後ろに入れてください。

設定項目

なし


コメント:

すべてのコメントを見る
最終更新:2019年04月07日 13:05