2012-05-06 56 views
1

是否有可能改變現有的BufferedImage對象的色彩空間,而所有像素複製到一個新的BufferedImage對象?我找不到這樣的方法,但也許我只是沒有找到它?我想將顏色空間從BufferedImage.TYPE_4BYTE_ABGR更改爲BufferedImage.TYPE_BYTE_BINARY。更改現有BufferedImage的顏色空間?

+0

*「沒有將所有像素複製到新的BufferedImage對象?」*爲什麼? –

+0

因爲它比爲它創建臨時對象更優雅,請使用for循環複製所有像素,並將臨時對象分配給原始的BufferdImage。 –

回答

2

the Java Doc

TYPE_4BYTE_ABGR
表示與藍,綠,紅和3個字節存儲的顏色8位RGBA顏色分量和1個字節的alpha圖像。

TYPE_BYTE_BINARY
表示一個不透明的字節填充1,2或4位圖像。

的像素的尺寸是不同的 - 4B VS 1B。 即使可以在Java結構對象中修改圖像的元數據,由於像素大小不同,因此不應該適用(*)。

(*)的新緩衝區較小,所以理論上,應該可以通過創建包含的相同緩衝液(但不充分使用)的新圖像重新使用存儲器。
你仍然需要編寫自己的循環它迭代像素在放置在緩衝順序,修改自己的色彩空間(ARGB->強度),並將其寫入到該源像素/ 4所住的地方。
嘗試使用此構造函數重用緩衝區:BufferedImage(ColorModel cm, WritableRaster raster, boolean isRasterPremultiplied, Hashtable properties)