如何使用Java将灰度2D矩阵打印到JPanel

时间:2016-03-17 15:54:45

标签: java swing matrix

我有二维矩阵。

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);
        }
    }

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

假设val是单元格的值。并且您希望val==0时该点为黑色,val==1000时为白色。

在RGB中,白色为(255,255,255),黑色为(0,0,0)。对于灰度,您只需要为每个3个组件提供相同的值。例如:(33,33,33)(D4,D4,D4)。让我们调用这个值c(换色)

现在,您的问题变成了一个简单的数学问题:

  • 何时val==0c=0
  • 何时val==1000c=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)