■ 色名をRGB値に変換する関数 [JavaScript版]

 "blue" や "darkred" などの色名(英語名)をRGB値に変換する方法はネット上でも種々紹介されているが、ここでは筆者が作成した簡単な関数 "getRGB()" を用いて、色名をRGB値(rr, gg, bb)に変換している。

color name:       (変換実行前の画面を維持)
  ・不正な色名に対しては(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)となる。
ホーム