2012-05-06 54 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)