从包含8位(灰度)或1位(二进制)数据的字节数组创建一个图像(bmp左右)

时间:2012-07-03 12:43:57

标签: java image binary bufferedimage grayscale

我有一个包含每像素8位灰度数据的字节数组,或者包含每像素1位的二进制数据。

我尝试了这个,但它不起作用,我认为每个像素占用4个字节(32位):

BufferedImage image = ImageIO.read(new ByteArrayInputStream(byteArray));
ImageIO.write(image, "BMP", new File("filename.bmp"));

我可以在BufferedImage中将数据类型更改为1位还是8位?

1 个答案:

答案 0 :(得分:1)

在稍微类似的情况下,我使用RasterBufferedImage。请参阅灰度8位的简单示例:

public static void main(String[] args) {
    JFrame f = new JFrame();
    f.setSize(600, 400);
    f.getContentPane().setLayout(new BorderLayout());
    BufferedImage bi = new BufferedImage(200, 100, BufferedImage.TYPE_BYTE_GRAY);
    WritableRaster wr = bi.getRaster();
    for (int col=0; col<bi.getWidth(); col++) {
        for (int row=0; row<bi.getHeight(); row++) {
            wr.setPixel(col, row, new int[] {(col+row)&0xff});
        }
    }
    JLabel l = new JLabel(new ImageIcon(bi));
    f.getContentPane().add(l, BorderLayout.CENTER);
    f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    f.setVisible(true);
}

我不记得,BufferedImage是否支持每像素1位。您可能希望查看一次设置多个像素的setPixels变体。