1

我正在尝试读取一个文件,其中有一个代表图像单色的矩阵, 在 JAVA 中使用BufferedImage

    final BufferedImage img = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_BYTE_GRAY);
    Graphics2D g = (Graphics2D)img.getGraphics();
    ... /*reading from file*/ 
    try (InputStream in = new FileInputStream("file.mac");
         Reader reader = new InputStreamReader(in, encoding);
         // buffer for efficiency
         Reader buffer = new BufferedReader(reader)) {
        int r;
        int i=0;
        int j=0;
        while ((r = buffer.read()) != -1) {
             g.setColor(new Color(?,?,?)); 
             g.fillRect(i, j, 1, 1);
             i++;
             if(i==WIDTH){
                 j++;
                 i=0;
             }
       }
    }

问题是我将在这一行g.setColor(new Color(?,?,?));中设置颜色,这是一个r表示矩阵中灰度级别的变量。

4

1 回答 1

0

您必须将颜色参数(红色、绿色和蓝色)设置为相同的值才能存档灰色。构造函数接受 [0, 255] 之间的ColorRGB 值,因此您必须缩放 r 值以匹配 [0, 255] 比例:

int grey = r/rMax * 255 //Gives you a grey value between [0, 255];

rMax是文件中最大的 r 值。

然后将颜色设置为

g.setColor(new Color(grey, grey, grey));

为了使整个事情更有效率,我建议首先创建一个灰色数组以避免创建大量重复Color对象:

Color[] colors = new Color[256];

for (int i = 0; i <=255; i++) {
    colors[i] = new Color(i, i, i);
}

然后Color在你的循环中设置

g.setColor(colors[grey]);
于 2014-12-20T00:48:44.530 回答