我发布这个帖子是因为我在处理 Java 中的图片时遇到了一些困难。我希望能够将图片转换为 byte[] 数组,然后能够进行反向操作,这样我可以更改每个像素的 RGB,然后制作一张新图片。我想使用这个解决方案,因为 BufferedImage 的 setRGB() 和 getRGB() 对于大图片来说可能太慢了(如果我错了,请纠正我)。
我在这里阅读了一些帖子以获得一个 byte[] 数组(例如这里),以便每个像素由包含红色、绿色和蓝色值的数组的 3 或 4 个单元格表示(当有额外的 alpha 值时)是 4 个单元格),这对我来说非常有用且易于使用。这是我用来获取此数组的代码(存储在我创建的 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对象)。它不起作用,因为我显然没有我需要的所有信息(我不知道 BufferedImage() 构造函数的 Hashtable 是什么)。
2) 使用 ByteArrayInputStream。这不起作用,因为 ByteArrayInputStream 预期的 byte[] 数组与我的无关:它代表文件的每个字节,而不是每个像素的每个组件(每个像素有 3-4 个字节)...
有人可以帮助我吗?