"blue" や "darkred" などの色名(英語名)をRGB値に変換する方法はネット上でも種々紹介されているが、ここでは筆者が作成した簡単な関数 "getRGB()" を用いて、色名をRGB値(rr, gg, bb)に変換している。
・不正な色名に対しては(0, 0, 255)が返される(-> 下記注参照)。
● 関数 getRGB(c) の説明: 色名 c に対するRGB値を返す
//......................................
function getRGB(c) { // color ->RGB
//......................................
g.fillStyle = c;
g.fillRect(0, 0, 1, 1);
var img = g.getImageData(0, 0, 1, 1);
var px = img.data;
var rgb = [px[0], px[1], px[2]];
return rgb;
}
(1)画面(Canvas)左上隅に指定された色で点(1x1 の長方形)を描画
(2)それをイメージデータ(img)として取得
(3)ピクセルデータ(px)を取得
(4)このデータの先頭から順に、R,G,B 値を得る
getRGB()を使用すると、画面左上のピクセルの色が変更されるが、これを避けたい(前の状態に戻したい)場合には、次のように関数を変更する。
//......................................
function getRGB(c) { // color ->RGB
//......................................
var img0 = g.getImageData(0, 0, 1, 1);
var px0 = img0.data;
g.fillStyle = c;
g.fillRect(0, 0, 1, 1);
var img = g.getImageData(0, 0, 1, 1);
var px = img.data;
var rgb = [px[0], px[1], px[2]];
g.putImageData(img0, 0, 0);
return rgb;
}
(注)不正な色名(例えば apple)を入力すると
・最初のRGB変換では数値は前のまま、塗りつぶし表示はblue。
・再度RGB変換すると、数値も blue に対応する(0, 0, 255)となる。