首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Java中将byte[]转换为BufferedImage?

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

Stack Overflow用户
提问于 2012-10-03 17:18:33
回答 1查看 52.1K关注 0票数 33

我发布这个帖子是因为我在处理Java中的图片时遇到了一些困难。我希望能够将图片转换为byte[]数组,然后能够进行相反的操作,这样我就可以更改每个像素的RGB,然后创建新的图片。我之所以使用这个解决方案,是因为BufferedImage的setRGB()和getRGB()对于巨大的图片来说可能太慢了(如果我错了,请纠正我)。

我在这里读了一些帖子,以获得一个byte[]数组(such as here),这样每个像素都由包含红、绿和蓝值的数组的3或4个单元格表示(当有4个单元格时,还有额外的Alpha值),这对我来说非常有用,也很容易使用。下面是我用来获得这个数组的代码(存储在我创建的PixelArray类中):

代码语言:javascript
复制
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个字节)……

有人能帮帮我吗?

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12705385

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档