2012-07-03 32 views
1

我要麼含有每像素8比特灰度數據或包含二進制數據在每像素1個比特的一個字節陣列的圖像(BMP左右) 。創建從字節數組含有8位(灰度)或1位(二進制)的數據中的Java

我試過,但其不工作,我認爲它服用每像素4個字節(32位):

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

我可以改變數據的類型1位或8位中的BufferedImage?

回答

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變體。

+0

謝謝,它的工作原理! 我用這個: '的BufferedImage圖像=新的BufferedImage(picWidth,picHeight,BufferedImage.TYPE_BYTE_GRAY); 。 image.getRaster()setDataElements(0,0,picWidth,picHeight,textureArray);' textureArray是含有灰度值的字節數組。我認爲你也可以使用它來代替WritableRaster! – tschakkkiiiii

相關問題