Конвертировать 2D массив int в диапазоне от 0 до 256 в png в градациях серого? - PullRequest
5 голосов
/ 25 марта 2011

Как мне преобразовать двумерный массив целых в 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.

Ответы [ 2 ]

3 голосов
/ 25 марта 2011

Изображение получается синим, потому что 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);
    }
}
0 голосов
/ 25 марта 2011

Я никогда не пытался, но на самом деле BufferedImage следует создавать даже в режиме серой шкалы:

new BufferedImage(100, 100, BufferedImage.TYPE_BYTE_GRAY);
...