2012-02-22 84 views
2

我使用方法getRGB()BufferedImage獲得像素。像素存儲在名爲data[]的陣列中。在對數據數組進行一些操作後,我需要再次創建一個BufferedImage,以便我可以將它傳遞給將從此數據數組顯示修改後的圖像的模塊,但我堅持使用它。如何從包含像素的數組創建BufferedImage?

回答

2
BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); 

然後再次設置像素。

bufferedImage.setRGB(x, y, your_value); 

PS:如在評論中指出,請使用該方法的getRGB()使用的答案從@TacticalCoder

+1

您不應該遍歷整個圖像並一次設置一個位。你應該一次複製整個緩衝區。 – 2014-12-09 11:50:39

+1

這是設置bufferedimage中所有像素的可怕方法,不應該被接受。 – tofiffe 2015-10-29 17:48:50

-1

您可以使用setRGB方法設置新圖像中像素的RGB(int)值。

+0

我該如何創建bufferedimage? – Saurabh 2012-02-22 14:04:26

19

我從BufferedImage中的像素。 像素存儲在名爲data []的數組中。

請注意,這可能會非常慢。如果您的BufferedImage支持它,您可能需要訪問底層的int []並直接從那裏複製/讀取像素。

例如,您數據[]快速度複製到底層INT []新BufferedImage的:

BufferedImage bi = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB); 
final int[] a = ((DataBufferInt) res.getRaster().getDataBuffer()).getData(); 
System.arraycopy(data, 0, a, 0, data.length); 

當然,你要確保你的數據[]包含與BufferedImage相同的像素(本例中爲ARGB)。

+1

這是更好的答案。我無法想到setRGB是任何事情的最佳解決方案。 – MCllorf 2017-10-31 07:48:27

+0

我認爲你的代碼存在錯誤:你的意思是'bi.getRaster'而不是'res.getRaster'? – Warkst 2018-01-26 16:16:56

相關問題