サーモグラフィのようなグラデーション
仕事でサーモグラフィのようなグラデーションを100段階で表示するプログラムが必要になった。そこで、サーモグラフィのような色を生成してくれるようなサンプルコードを探したのだがなかなか見つからない(Google Code Searchも使って「Thermography」で検索したんだけど、検索結果から探し出すのがめんどくさくていやになった)。仕方ないので、サーモグラフィの色の変化図が載っているページと「プログラミング解説 - 碧色工房」のサンプルを元に自分で作ってみた。
以下にメインとなる色生成部分のコードを載せます(Java)。
Color[] col = new Color[101]; for (int i = 0; i < 14; i++) { col[i] = new Color(0, 0, i*18); col[i+14] = new Color(0, i*18, 255); col[i+28] = new Color(0, 255, 255-i*18); col[i+42] = new Color(i*18, 255, 0); col[i+56] = new Color(255, 255-i*18, 0); col[i+70] = new Color(255, 0, i*18); col[i+84] = new Color(255, i*18, 255); } for (int i = 98; i < 101; i++) { col[i] = new Color(255, 255, 255); }
7段階で分けたので、割り切れなく、最後の3つは白にしてしまった。
色のバランスを整えようと、ちょっといじったのが下。
for (int i = 0; i < 14; i++) { col[i] = new Color(0, 0, i*18); col[i+14] = new Color(0, i*18, 255); col[i+29] = new Color(0, 255, 255-i*18); col[i+43] = new Color(i*18, 255, 0); col[i+58] = new Color(255, 255-i*18, 0); col[i+73] = new Color(255, 0, i*18); col[i+87] = new Color(255, i*18, 255); } col[28] = new Color(0, 255, 255); col[57] = new Color(255, 255, 0); col[72] = new Color(255, 0, 0); col[100] = new Color(255, 255, 255);
全部の範囲での変化量が同じ(18)なせいか、水色と黄色の範囲が狭くなってる。あと、ピンクの範囲を狭めて、赤の範囲を広げたい。区間ごとの変化量を変えればそれもできるんだけど、めんどくさいからこれでいいや。