5

int の 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);

しかし、画像は青くなります。どうすればグレースケールにできますか。

image[][] には、0 ~ 256 の範囲の整数が含まれます。

4

2 に答える 2

3

は RGB 値を期待しているため、画像は青で表示されsetRGBます。下位バイトのみを設定しているため、おそらく青です。これが、すべて青で表示される理由です。

試す:

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);
    }
}
于 2011-03-25T19:09:50.857 に答える
0

私は試したことはありませんが、実際にはグレースケールモードでも BufferedImage をインスタンス化する必要があります:

new BufferedImage(100, 100, BufferedImage.TYPE_BYTE_GRAY);
于 2011-03-25T19:19:20.847 に答える