2014-06-30 40 views
0

我有圖像的RBG值的數組int [] [],我需要將它存儲到jpg文件。我試圖做到這一點:作爲圖像文件保存RGB的int [] []

BufferedImage image = ImageIO.read(new ByteArrayInputStream(result)); 
ImageIO.write(image, "jpg", new File("/path/", "snap.jpg")); 

但我有一個int [] []不是byte []數組。如何將int [] []轉換爲byte []而不丟失值?

+0

一個BufferedImage可以創建爲使用int數組或字節數組如果您在建立圖像時使用適當的圖像類型常量。我從來沒有通過ImageIO直接讀取數組,而是從數組中獲取數組,或將數組放入BufferedImage的柵格數據緩衝區中。請注意,我不贊成這樣做,所以請帶上一點鹽的信息。 –

+1

如果您擔心數據丟失,爲什麼要使用像jpeg這樣的有損壓縮? –

+0

http://stackoverflow.com/questions/21031316/creating-png-file-from-int-array-of-rgb-data/37501730可能的重複 –

回答

4

即使從int[][]byte[]的問題放在一邊,你的表達ImageIO.read(new ByteArrayInputStream(result));並沒有真正意義,因爲它預計result是一個圖像文件的內容(不只是像素值,但所有的頭,填充等等,某些識別的圖像文件格式)。

我想你想要的是:

final int height = result.length; 
final int width = result[0].length; 
final BufferedImage image = 
    new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); 
for (int y = 0; y < height; ++y) { 
    for (int x = 0; x < width; ++x) { 
     bufferedImage.setRGB(x, y, result[y][x]); 
    } 
}