将int的2D数组从0到256转换为灰度png?

wfb*_*ale 5 java file-io png grayscale javax.imageio

如何将2D数组转换为灰度png.现在我有这个:

    BufferedImage theImage = new BufferedImage(100, 100, BufferedImage.TYPE_INT_RGB);
    for(int y = 0; y<100; y++){
        for(int x = 0; x<100; x++){
            theImage.setRGB(x, y, image[y][x]);
        }
    }
    File outputfile = new File("saved.bmp");
    ImageIO.write(theImage, "png", outputfile);
Run Code Online (Sandbox Code Playgroud)

但是图像是蓝色的.我怎样才能使它成为灰度.

image [] []包含0到256之间的整数.

yan*_*yan 3

图像显示为蓝色,因为setRGB需要 RGB 值,您只设置低字节,这可能是蓝色,这就是为什么它显示为全蓝色。

尝试:

BufferedImage theImage = new BufferedImage(100, 100, BufferedImage.TYPE_INT_RGB);
for(int y = 0; y<100; y++){
    for(int x = 0; x<100; x++){
        int value = image[y][x] << 16 | image[y][x] << 8 | image[y][x];
        theImage.setRGB(x, y, value);
    }
}
Run Code Online (Sandbox Code Playgroud)