如何使用java创建16位灰度图像

时间:2011-12-08 23:59:48

标签: java image-processing

我试图创建一个16位的PNG,但不能让它一直写入黑色。另外,如何将定义为255,255,255 / r,g,b的8位颜色转换为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 个答案:

答案 0 :(得分:1)

value >>= 16行将其设置为零。

至于从24位RGB转换为16位颜色通常有两种方式...... RGB565和RGB555。数字表示给每个颜色分量多少位。

答案 1 :(得分:0)

不是解决此问题的方法,而是实现此要求的另一种方法。

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();
}