Как мне создать 16-битное изображение в градациях серого с Java - PullRequest
1 голос
/ 09 декабря 2011

Я пытаюсь создать 16-битный PNG, но не могу получить, он продолжает писать только черным.Также, как я могу преобразовать 8-битный цвет, определенный как 255,255,255 / r, g, b, в 16-битный цвет?

    BufferedImage bi = new BufferedImage(256, 256,
            BufferedImage.TYPE_USHORT_GRAY);

    // 65536
    for (int i = 0; i < 256; i++)
        for (int j = 0; j < 256; j++) {
            int mask = 0xf0
            int value = 255 & mask; // zero other bits
            value >>= 16;
            bi.setRGB(i, j, value);
            // bi.setRGB(i, j, 65536);
        }

    File f = new File("gray.png");

    try {
        ImageIO.write(bi, "png", f);
    } catch (IOException e) {
        e.printStackTrace();
    }

Ответы [ 2 ]

1 голос
/ 09 декабря 2011

Линия value >>= 16 устанавливает ее на ноль.

Что касается преобразования из 24-битного RGB в 16-битный цвет, обычно есть два пути ... RGB565 и RGB555. Цифры обозначают, сколько битов дается каждому компоненту цвета.

0 голосов
/ 09 декабря 2011

Не решение этой проблемы, а еще один способ выполнения требования.

BufferedImage bi = new BufferedImage(256, 256, BufferedImage.TYPE_USHORT_GRAY);

Graphics2D g = bi.createGraphics();
g.setColor(Color.GRAY);

g.fillRect(0,0,256,256);
File f = new File("C:/gray.png");

try {
    ImageIO.write(bi, "png", f);
} catch (IOException e) {
    e.printStackTrace();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...