我发布这个帖子是因为我在处理Java中的图片时遇到了一些困难。我希望能够将图片转换为byte[]数组,然后能够进行相反的操作,这样我就可以更改每个像素的RGB,然后创建新的图片。我之所以使用这个解决方案,是因为BufferedImage的setRGB()和getRGB()对于巨大的图片来说可能太慢了(如果我错了,请纠正我)。
我在这里读了一些帖子,以获得一个byte[]数组(such as here),这样每个像素都由包含红、绿和蓝值的数组的3或4个单元格表示(当有4个单元格时,还有额外的Alpha值),这对我来说非常有用,也很容易使用。下面是我用来获得这个数组的代码(存储在我创建的PixelArray类中):
public PixelArray(BufferedImage image)
{
width = image.getWidth();
height = image.getHeight();
DataBuffer toArray = image.getRaster().getDataBuffer();
array = ((DataBufferByte) toArray).getData();
hasAlphaChannel = image.getAlphaRaster() != null;
}
我最大的问题是,如果我想转换图片(例如,删除蓝色/绿色的值,只保留红色的值),我还没有找到任何有效的方法将这个byte[]数组转换为新的图像。我尝试了这些解决方案:
1)创建一个DataBuffer对象,然后创建一个SampleModel,最后创建一个WritableRaster,然后创建BufferedImage (带有附加的ColorModel和哈希表对象)。它不工作是因为我显然没有我需要的所有信息(我不知道Hashtable for BufferedImage()构造函数是什么)。
2)使用ByteArrayInputStream。这不起作用,因为ByteArrayInputStream期望的byte[]数组与我的无关:它表示文件的每个字节,而不是每个像素的每个组件(每个像素有3-4个字节)……
有人能帮帮我吗?
https://stackoverflow.com/questions/12705385
复制相似问题