我有二维矩阵。
int[][] matrix;
矩阵的值是区间int
中的(X, Y)
个数字。
例如,matrix
的值位于(0, 1000)
区间。
如何计算像素灰度颜色
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix[0].length; j++) {
myJpanel.setRGB(i, j, grayScaleColor);
}
}
感谢您的帮助。
答案 0 :(得分:1)
假设val
是单元格的值。并且您希望val==0
时该点为黑色,val==1000
时为白色。
在RGB中,白色为(255,255,255)
,黑色为(0,0,0)
。对于灰度,您只需要为每个3个组件提供相同的值。例如:(33,33,33)
或(D4,D4,D4)
。让我们调用这个值c
(换色)
现在,您的问题变成了一个简单的数学问题:
val==0
,c=0
val==1000
,c=255
基本上,您只需更改矩阵的比例即可。
所以c=(int) (val*255.0/1000.0)
您需要添加的颜色为new Color(c,c,c)
<强> TL; DR 强>:
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix[0].length; j++) {
int c=(int) (matrix[i][j]*255.0/1000.0);
myJpanel.setRGB(i, j, new Color(c,c,c));
}
}
请注意,这可能不起作用,因为我不知道myJpanel
类型是什么。
修改强>
你必须将此视为一个数学问题。 我们可以总结一下这样的问题:
c = a*val + constant
因为您的灰度是线性的。 这与
完全相同c = a*(val + b)
了解
0 = a*(your_min + b)
255 = a*(your_max + b)
通过开发这个数学系统,你终于得到了
b = -your_min = -1* your_min
a = 255/(your_max + b) = 255/(your_max-your_min)