colorspaceパッケージのRGB
1.R,G,Bの値
colorspaceパッケージでは、RGB()と大文字が使われています。各値は、[0..1]です。
R言語の標準のrgbは、小文字で書かれ、各値は、これもデフォルトは[0..1]です。
しかし、両者には違いがあります。
- > # 標準のrgb
- > rgb(32,64,96,maxColorValue=255)
- [1] "#204060"
- > rgb(32/255,64/255,96/255)
- [1] "#204060"
- > # colorspaceパッケージのRGB
- > RGB(32/255,64/255,96/255)
- R G B
- [1,] 0.1254902 0.2509804 0.3764706
- > hex(RGB(32/255,64/255,96/255))
- [1] "#5B819F"
rgb()の世界では、[0..1] は、単に 255 で割って、正規化しています。
RGB()は、どうなっているか見ます。
まず、RGB()で、通常の[0..255]のRGBの値をどう扱うのか示します。
- > # (32,64,96)に相当する16進文字のcolorを得ます
- > rgb(32,64,96,maxColorValue=255)
- [1] "#204060"
- > # その値をcolorspaceのRGBにします
- > hex2RGB("#204060")
- R G B
- [1,] 0.02056092 0.06567053 0.1398741
- > # そのRGBを16進文字に戻します
- > hex(hex2RGB("#204060"))
- [1] "#204060"
R の標準のcolorである16進文字を介せば変換・復元することが分かります。
以下のような演算で、[0..255] の RGBを [0..1] に変換しています。
- n255 <- function(t)
- {
- t <- t/255
- if(t > 0.03928) d <- ((t + 0.055) / 1.055)^2.2
- else d <- t / 12.92
- return(d)
- }
実行してみます。colorspaceのRGBの各値と一致します。
- > hex2RGB("#204060")
- R G B
- [1,] 0.02056092 0.06567053 0.1398741
- > n255(32) # R
- [1] 0.02056092
- > n255(64) # G
- [1] 0.06567053
- > n255(96) # B
- [1] 0.1398741
この変換は、与えられる値が2.2のガンマ補正された値だと言う考えに依るのだと思います。
16進文字列に変換しないで、RGBの各値を使う場合は、逆の変換が必要になります。
- > r255 <- function(u)
- + {
- + if (u > 0.00304) d <- 1.055 * (u^(1 / 2.2)) - 0.055
- + else d <- 12.92 * u;
- + return(round(d*256))
- + }
- >
- > r <- hex2RGB("#204060")
- > r255(r©coords[1])
- [1] 32
- > r255(r©coords[2])
- [1] 64
- > r255(r©coords[3])
- [1] 96
※ colorspaceのRGBは、計算上算出される値を返すので、[0..1] の範囲以外の値を返すことがあります。
|