小编Jef*_*let的帖子

如何在Java中将byte []转换为BufferedImage?

我发布这个帖子是因为我在处理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;
}
Run Code Online (Sandbox Code Playgroud)

我的大麻烦是我没有找到任何有效的方法将此byte []数组转换为新图像,如果我想转换图片(例如,删除蓝色/绿色值并仅保留红色值).我试过这些解决方案:

1)创建一个DataBuffer对象,然后创建一个SampleModel,最后创建一个WritableRaster,然后创建BufferedImage(带有额外的ColorModel和Hashtable对象).它没有用,因为我显然没有我需要的所有信息(我不知道什么是BufferedImage()构造函数的Hashtable).

2)使用ByteArrayInputStream.这不起作用,因为ByteArrayInputStream所期望的byte []数组与我的无关:它代表文件的每个字节,而不是每个像素的每个分量(每个像素有3-4个字节)......

有人能帮助我吗?

arrays byte bufferedimage

23
推荐指数
4
解决办法
4万
查看次数

标签 统计

arrays ×1

bufferedimage ×1

byte ×1