RGB,HSV

色情報について

RGB

色、特に光というのは、赤、緑、青の光を混ぜ合わせることで様々な色を表現できます。
この三つの光が「光の三原色」で、それぞれの頭文字Red, Green, Blueを取ってRGBといいます。

ディスプレイも発光を用いて色を表現しているため、RGBで画像を表現することが多いです。
現在は、各色ごとに0~255の256段階の強さを組み合わせて表現するのが主流で、
0が暗く、255がもっとも明るい色になります。

光は重なると明るくなるため、RGB各要素の値が大きくなるほど白色に近づきます。
これを加色法といいます。

HSV

HSVとは、色相(Hue)、彩度(Saturation)、明度(Value)を用いて色を表現する方法です。
色相は色味で、赤や水色など(虹のようなイメージ)の位置を表します。
彩度は鮮やかさで、彩度が低いほど灰色に近くなります。
明度は明るさで、高いほど白に、低いほど黒に近づきます。

イメージしにくいかもしれませんが、要は拡張編集の色選択ダイアログです。
四角の周りの円が色相で、四角の横位置が彩度、縦位置が明度です。

なお、この関数では値の範囲が
色相は0~360、彩度、明度は0~100となっています。
色相の0度が赤、60度刻みで黄色、緑、水色、青、紫、赤…となります。

度で表現しているとおり、一周360度回るとまた元の色に戻ります。

RGB

lua.txtの記述

RGB(r,g,b)
色情報(0x000000~0xffffff)と赤(0~255),緑(0~255),青(0~255)各要素の相互変換をします。
r,g,bを2つ指定した場合はオブジェクトの時間経過に応じて色を変化させます。
r,g,b RGB各色情報
例:col = RGB(r,g,b)
col RGBを1つの数値で表した色情報
例:r,g,b = RGB(col)
r1,g1,b1 一色目の色情報(RGB)
r2,g2,b2 二色目の色情報(RGB)
例:col = RGB(r1,g1,b1,r2,g2,b2)

解説

渡された数値をRGBからCOLへ、COLからRGBへ変換します。
RGBのみ、2色の色情報を渡すと、オブジェクトの時間にしたがって変化します。

スクリプト例

【RGBからCOLへ変換するケース】
col = RGB( 64, 192, 255 )
これを実行すると、colには次のような値が代入されます。
col = 0x40C0FF
【COLからRGBへ変換するケース】
r,g,b = RGB( 0x0080FF )
これを実行すると、r,g,bには各々次のような値が代入されます。
r = 0
g = 128
b = 255

【時間変化を伴ったCOLへ変換するケース】
col = RGB( 64, 192, 255, 128, 64, 0 )
colにはオブジェクト開始時には RGB( 64, 192, 255 ) が、
終了時には RGB( 128, 64, 0 ) になるような値が代入されます。

HSV

lua.txtの記述

HSV(h,s,v)
色情報(0x000000~0xffffff)と色相(0~360),彩度(0~100),明度(0~100)各要素の相互変換をします。
h,s,vを2つ指定した場合はオブジェクトの時間経過に応じて色を変化させます。
h,s,v 色相、彩度、明度
例:col = HSV(h,s,v)
col RGBを1つの数値で表した色情報
例:h,s,v = HSV(col)
h1,s1,v1 一色目の色情報(HSV)
h2,s2,v2 二色目の色情報(HSV)
例:col = HSV(h1,s1,v1,h2,s2,v2)

解説

渡された数値をHSVからCOL、COLからHSVへへ変換します。
HSVのみ、2色の色情報を渡すと、オブジェクトの時間にしたがって変化します。

スクリプト例

【HSVからCOLへ変換するケース】
col = HSV( 60, 100, 100 )
これを実行すると、colには次のような値が代入されます。
col = 0xFFFF00
【COLからHSVへ変換するケース】
h,s,v = HSV( 0x0080FF )
これを実行すると、h,s,vには各々次のような値が代入されます。
h = 210
s = 100
v = 100

【時間変化を伴ったCOLへ変換するケース】
col = HSV( 30, 50, 100, 120, 100, 50 )
colにはオブジェクト開始時には HSV( 30, 50, 100 ) が、
終了時には HSV( 120, 100, 50 ) になるような値が代入されます。

時間変化を任意の値にしたい

時間によって色を変えるのは便利ですが、任意の時点での色の取得ができません。

色の変化は直線的(一次式)であるため、線形補間を使うと簡単に求めることができます。

t = obj.time/obj.totaltime
r = r1 + (r2-r1) * t

ただし、色情報は整数値である必要があるため、小数点以下を切捨てる必要があります。

以下は実装例です。

function MyRGB(t,r1,g1,b1,r2,g2,b2)
  r = math.floor( r1 + (r2-r1) * t )
   g = math.floor( g1 + (g2-g1) * t )
   b = math.floor( b1 + (b2-b1) * t )
   return RGB(r,g,b)
end


  • 最終更新:2013-12-08 16:18:26

このWIKIを編集するにはパスワード入力が必要です

認証パスワード