質問
Javaのカラーモデル(RGB、HSV、Lab)を簡単に変換する方法はありますか。
RGBカラーモデルを想定:
- 黒体スペクトルのカラーパレットを計算するにはどうすればよいですか?ヒートマップチャートに使用したい。
- 単一波長スペクトルはどうですか?
編集: ColorSpace クラスは、RGB / CIEと他の多くのカラーモデル間の変換に使用できます。
解決
HSVカラーモデルを使用して、このようなパレットを作成できます。これは、HSV to RGBコードを所定の場所に配置し、数分間数字をいじってみれば簡単です。
ただし、小さなパレットを生成するためだけにプロジェクトにコードを追加することは価値がないと思います。
ファイルから必要なパレットを抽出し、静的配列として追加する方がはるかに簡単で手間がかかりません。
Photoshopでは、パレットを編集できます。プリセットとして非常に優れた黒のボディパレットが付属しています。
これらを単に.actファイルとして保存できます。ファイル自体は単純な256色ですá 3バイトのファイル(順序が読み込まれ、緑、青。チャネルごとに8ビット)。
他のヒント
JavaにはRGBからHSBへの変換が組み込まれています。 Javaで色のクイックパレットが必要になるたびに、次のようにします。
public Color[] generateColors(int n)
{
Color[] cols = new Color[n];
for(int i = 0; i < n; i++)
{
cols[i] = Color.getHSBColor((float) i / (float) n, 0.85f, 1.0f);
}
return cols;
}
これは迅速で汚いハックです(アプリの「魔法の」数字を微調整します)が、単純な使用のために、明るく明るい快適なパレットを生成します。
あなたの質問を理解していないかもしれませんが、RGB出力デバイスから真の黒体スペクトルを実際に生成することはできません。限られた色域が問題になります。視覚的に黒体スペクトルに似たものだけが必要な場合は、おそらくはるかに簡単です。
近似として、(R、G、B)(0,0,0)から(255,0,0)へ、次に(255,255,0)へ、そして(255,255,255)へのランプ。それはあなたに鈍い赤からオレンジ、黄色、白への移行を与えるでしょう。
より科学的なものが必要な場合は、黒体放射に関するウィキペディアの記事にいくつかのプロットがあります色と温度の関係。 CIE座標がわかれば、好きな色空間でRGBに変換できます。
この色スペクトルを生成できます https://i.stack.imgur.com/ktLmt .jpg
次のコードを使用:
public void render(Screen screen) {
int green = 255;
int red = 0;
for (int i = 0; i <= 255 * 2; i++) {
int rate = i / 255;
screen.fillRect((x + (i * width)/6), y, width, height, new Color(red, green, 0));
red += 1 - rate;
green -= rate;
}
}
これは、AS3でHSLカラーを正方形にする良い方法です。
/**
* Generate a BitmapData HSL color square (n x n) of hue
* At a low n dimension you get cool blocky color palettes (e.g. try n=10)
*/
function generateColorSquare(n:uint, hue:uint):BitmapData
{
var bd:BitmapData = new BitmapData(n, n, false, 0xFFFFFF);
for (var i:uint=n*n; i > 0; i--)
{
bd.setPixel(i % n, Math.floor(i / n), HSBColor.convertHSBtoRGB(hue, i / (n*n), (1/n) * (i % n) ));
}
return bd;
}