gpt4 book ai didi

java - 将字节数组转换为图像

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:26:39 25 4
gpt4 key购买 nike

我有一个大小为 640*480*3 的字节数组,它的字节顺序是 r,g,b。我正在尝试将其转换为图像。以下代码不起作用:

BufferedImage img = ImageIO.read(new ByteArrayInputStream(data));

除了异常(exception)

Exception in thread "main" java.lang.IllegalArgumentException: image == null!
at javax.imageio.ImageTypeSpecifier.createFromRenderedImage(ImageTypeSpecifier.java:925)
at javax.imageio.ImageIO.getWriter(ImageIO.java:1591)
at javax.imageio.ImageIO.write(ImageIO.java:1520)

我也试过这段代码:

ImageIcon imageIcon = new ImageIcon(data);
Image img = imageIcon.getImage();
BufferedImage bi = new BufferedImage(img.getWidth(null),img.getHeight(null),BufferedImage.TYPE_3BYTE_BGR); //Exception

但没有成功:

Exception in thread "main" java.lang.IllegalArgumentException: Width (-1) and height (-1) must be > 0

如何从这个数组接收图像?

最佳答案

普通字节数组不是公认的图像格式。您必须自己编写转换代码。幸运的是,这并不难做到:

int w = 640;
int h = 480;
BufferedImage i = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
for (int y=0; y<h; ++y) {
for (int x=0; x<w; ++x) {
// calculate index of pixel
// depends on exact organization of image
// sample assumes linear storage with r, g, b pixel order
int index = (y * w * 3) + (x * 3);
// combine to RGB format
int rgb = ((data[index++] & 0xFF) << 16) |
((data[index++] & 0xFF) << 8) |
((data[index++] & 0xFF) ) |
0xFF000000;
i.setRGB(x, y, rgb);
}
}

像素索引的确切公式取决于您如何组织数组中的数据——您并没有真正准确地指定。但是原理总是一样的,将R、G、B值组合成一个RGB(准确地说是ARGB)值,然后使用setRGB()方法将其放入BufferedImage。

关于java - 将字节数组转换为图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20409830/

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