生成光谱调色板

有没有一种简单的方法来转换Java(RGB,HSV和Lab)中的颜色模型。

假设RGB颜色模型:

  • 如何计算黑体光谱调色板? 我想将它用于热图图表。
  • 单波长光谱怎么样?

编辑:我发现ColorSpace类可用于RGB / CIE和许多其他颜色模型之间的转换。

您可以使用HSV颜色模型构建这样的调色板。 一旦你有HSV到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。

编辑:找到一些其他在线参考: 太阳是什么颜色的? 黑体是什么颜色的?

您可以生成此色谱http://sofzh.miximages.com/java/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 (nxn) of hue * At a low n dimension you get cool blocky color palettes (eg 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; }