是否有一种简单的方法可以在Java(RGB,HSV和Lab)中的颜色模型之间进行转换。
假设RGB颜色模型:
编辑:我发现ColorSpace类可用于RGB / CIE与许多其他颜色模型之间的转换。
答案 0 :(得分:21)
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;
}
这是一个快速而肮脏的黑客(我会调整你的应用程序的'魔术'数字),但是对于我的简单用途,它会产生一个漂亮明亮的托盘。
答案 1 :(得分:4)
也许我不理解您的问题,但您无法从RGB输出设备真正生成真正的黑体光谱。有限的色域将是一个问题,如果没有别的。如果您想要的只是视觉上类似于黑体光谱的东西,那可能会容易得多。
作为近似值,从(R,G,B)(0,0,0)到(255,0,0),然后到(255,255,0),然后到(255,255,255)。那会让你变成暗红色到橙色,黄色到白色的过渡。
如果你想要更科学的东西,那么关于black body radiation的维基百科文章有一些颜色与温度的关系。一旦你弄清楚CIE坐标,你可以在你喜欢的颜色空间中将它们转换为RGB。
编辑:找到其他一些在线参考: What color is the Sun? What color is a blackbody?
答案 2 :(得分:3)
您可以使用HSV颜色模型构建此类调色板。一旦你使用HSV到RGB代码就可以轻松实现,并且可以在数分钟内使用数字。
但是,我认为将代码添加到项目中只是为了生成一个小调色板是不值得的。
从文件中提取所需的调色板并将其添加为静态数组会更容易,也更少工作。
Photoshop让你编辑调色板,并附带一个非常漂亮的黑色主体调色板作为预设。
您可以将它们保存为.act文件。文件本身只是一个简单的256色á3字节文件(顺序是读取,绿色,蓝色。每个通道8位)。
答案 3 :(得分:0)
您可以生成此色谱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;
}
}
答案 4 :(得分:-1)
这是在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;
}