【JavaScript】Canvasで使う色の指定を一定幅で行う
こんにちは、しきゆらです
タイトルは何を言っているのかわからないかもしれません・・・(語彙力、説明力?不足)
例えば、色を3段階とか10段階とかのような方法で指定する方法を思いついたのでメモ
Processingという言語では、色を一定の幅ごとに変化するように指定することができます
colorModeという関数を用いて、RGBからHSLに変更し、合わせて色の幅を指定することで
上記のようなことができます
これをJSでも使いたい!
でもどうすれば・・・
と思って調べてみたら、方法を思いついたのでメモ
どういうことをやろうとしているの?
やりたいことは、Canvas上にグラフを描くことです
ライブラリはいっぱいあるのですが、書き方を調べてそれに合うようにデータを作って・・・
とやるよりも早いことと、自分で作るため拡張しやすいためですね
あとは、単純に自分でやってみたかったってこと
グラフは、よくあるこんなやつ
上の例ではデータは3つ
しかし、データがいくら増えてもきちんと色分けしてほしい
そんなグラフを作りたいと思ったわけです
そこで、最初に書いたようなProcessingの関数を思い出したわけですね
その中で、色の指定する方法としてHSLというものがあることを知りました
HSLとはなんぞや?
HSLとは、RGBのように色を指定する方法の一つです
RGBでは「赤、緑、青」の組み合わせで指定しますが、HSLは「色相、彩度、輝度」で色を指定します
参考:http://gigazine.net/news/20150217-rgb-hsl/
簡単に言うと、色を円盤上に配置したイメージですかね(色相)
あとは、明るさと鮮やかさを指定することで色を指定しています
RGBは3つの色を混ぜて指定していましたが、HSLでは色は色相の部分で指定するため
1つの値を変化させるだけで色を指定することができます(これ重要)
やりたいことをコードにする
Canvasで色を指定するには「fillStyle」や「strokeStyle」で色を指定すればいいわけですが
ここでHSLで指定してあげます
参考:http://webos-goodies.jp/archives/50811624.html
context.strokeStyle = "hsl(100, 100%, 50%)";
参考サイトさんにあるように、
- 色相:0から360の間
- 彩度:0%から100%の間
- 輝度:0%から100%の間
で指定してあげます
これを、グラフで使う場合は
色相をデータの数で割ってあげればいいわけですね
こんな感じ
var color_range = 360 / data.length; var x = 0; for (var i = 0; i < data.length; i++) { ctx.fillStyle = "hsl(" + color_range * i + ", 100%, 50%)"; ctx.fillRect(x, start_heigt, data[i], bar_height); x += data[i]; }
やってることは
- data[0]の大きさだけ四角を描く
- グラフの開始位置をdata[0]の長さ分ずらす
これをdataの要素数分ひたすら繰り返しているだけです
色の指定は4行目部分
ctx.fillStyle = "hsl(" + color_range * i + ", 100%, 50%)";
for文はdataの要素数回繰り返すので、色の幅を求め(color_range)それに繰り返した回数をかければいいわけです
実際にコードを書いてみるとそこまで難しいことではないですね
でも、HSLを使わずにどう書けばいいかわからないな・・・
今回はこの辺で
おわり
ディスカッション
コメント一覧
まだ、コメントがありません