gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 11:06:48 24 4
gpt4 key购买 nike

我发布此线程是因为我在处理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对象)。它没有用,因为我显然没有我需要的所有信息(我不知道BufferedImage()构造函数的哈希表是什么)。

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

有人可以帮我吗?

最佳答案

尝试这个:

private BufferedImage createImageFromBytes(byte[] imageData) {
ByteArrayInputStream bais = new ByteArrayInputStream(imageData);
try {
return ImageIO.read(bais);
} catch (IOException e) {
throw new RuntimeException(e);
}
}

关于arrays - 如何在Java中将byte []转换为BufferedImage?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12705385/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com