【发布时间】:2015-08-21 18:00:47
【问题描述】:
1. 考虑一个 32 位 java 浮点数 sample in (0.0f .. 1.0f) 和四个 32 位 java 整数 r, g, b, a 每个都在 (0 .. 255) 一个名为 @ 的向量中987654324@.
2.sample 变量包含我希望以热图的形式在ImageIcon 中呈现的标准化测量数据。最终 RGBA 值的目标是一个整数向量,稍后将作为像素数据传递给 java BufferdImage。
3. 约束条件是当sample==0.0f 时RGBA==[0,0,0,255] 具有均匀分布,因此sample==1.0f 代表RGBA==[255,0,0,255],而sample==0.5f 则由RGBA==[255,255,255,255] 代表。 Alpha 通道始终为 255。
4. 到目前为止,我使用了一种静态方法,将颜色分成三个单独的部分 R G B 而 A 在 255 处保持静态。就像这样
/* BLUE */
if ( sample <= 0.340000f ){
localSample = (sample/(0.340000f/255.000000f));
sourceLinearData[localIndex] = 0; // R
sourceLinearData[localIndex+1] = 0; // G
sourceLinearData[localIndex+2] = Math.round(localSample); // B
}
5. 我的问题:A) 是否有任何合适的 java api/库可以帮助我做到这一点? B)如果不是,那么我会寻求解决方案的建议。
6. 想法:由于每个 R、G、B、A 都在 (0 .. 255) 中,我假设我可以使用字节而不是整数,然后可能将这些字节转换为一个变量,然后以这种方式提取浮点数。虽然到目前为止我还没有用这种方法取得任何成功。
7. 编辑:添加示例热图
已解决:因此,就像软件开发中的许多其他事情一样,这个问题也有不止一个答案。就我而言,我想要一条最直接的路线,而且额外的工作量最少。因此,我决定接受@haraldK 给出的答案。这就是说,如果您正在寻找一种具有更多控制力、精确度和灵活性的正式解决方案,@SashaSalauyou 提供的答案是更正确的答案。
【问题讨论】:
-
请注意,java 使用有符号字节,因此您必须将它们转换回带 byte & 0xFF 的有符号整数。
-
你可以做 r = sample * 255;这会产生蓝到红的渐变,但在 0.5 时它不会是白色的。
-
如果我理解得很好,1.0 是红色,0.5 是白色,0.0 是黑色。如果是这样,很难想象线性颜色渐变会是什么样子。热图实际使用了哪些颜色?
-
@Emd4600:是的,我想我明白你的意思。虽然在这种情况下,我希望找到 0.5f 的白色渐变。
-
@SirDarius:你是对的。热图将显示沉积在介质中特定位置的能量分布。我将尝试在上面添加示例图像。
标签: java image image-processing