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个字节)…
有人可以帮帮我吗?
BufferedImage
,以与第一篇帖子中相同的方式获取byte[]
,然后使用System.ArrayCopy
。当您尝试同时写入byte[]和图像的Graphics对象时,它确实会失去同步。 - Mark Jeronimusnull
,因为我的ImageIO
没有一个理解原始流的ImageInputStreamSPI
。 - Mark Jeronimus