gpt4 book ai didi

java - 从字节数组转换和显示图像

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

我正在制作一个程序,它从服务器获取有关字节数组中图像的数据。我正在将此数据转换为 24 位 BMP 格式(无论是 jpeg、png、bmp 还是 8-24-32bpp)。首先,我将它保存到我的 HD,然后我将它加载到 JLabel 的图标中。工作完美,但在某些情况下我会遇到以下异常:

java.io.EOFException at
javax.imageio.stream.ImageInputStreamImpl.readFully(ImageInputStreamImpl.java:353) at
com.sun.imageio.plugins.bmp.BMPImageReader.read24Bit(BMPImageReader.java:1188) at
com.sun.imageio.plugins.bmp.BMPImageReader.read(BMPImageReader.java:843) at
javax.imageio.ImageIO.read(ImageIO.java:1448) at
javax.imageio.ImageIO.read(ImageIO.java:1308)

对于这一行(第二行)

File imgFile = new File("d:/image.bmp");
BufferedImage image = ImageIO.read(imgFile);

在这些情况下:

  • 图像没有加载到 JLabel 中,但可以在我的 HD 上找到
  • 转换不正确,因为有些东西“失误”了
  • 图片就像在word文档中使用斜体一样

首先,我想也许 bpp 是问题所在,然后我想可能是图片太大了,但对于这两种建议,我都有有效的案例和无效的案例。我有点卡在这里,很乐意提供想法。

最佳答案

  • the picture is like .. when You use italics in a word document

我想我现在终于明白这个项目符号的意思了.. ;-)

推测性答案,但这里是:

如果您编写的图像看起来“歪斜”,可能是因为 BMP 格式指定的每列缺少填充(或 BMP header 中的宽度字段不正确)。那么我假设,您获得 EOF 异常的图像是宽度不是 4 的倍数的地方。

尝试使用 ImageIO 编写 BMP 以查看是否有帮助:

private static BufferedImage createRGBImage(byte[] bytes, int width, int height) {
DataBufferByte buffer = new DataBufferByte(bytes, bytes.length);
ColorModel cm = new ComponentColorModel(ColorSpace.getInstance(ColorSpace.CS_sRGB), new int[]{8, 8, 8}, false, false, Transparency.OPAQUE, DataBuffer.TYPE_BYTE);
return new BufferedImage(cm, Raster.createInterleavedRaster(buffer, width, height, width * 3, 3, new int[]{0, 1, 2}, null), false, null);
}

...

byte[] bytes = ...; // Your image bytes
OutputStream stream = ...; // Your output

BufferedImage image = createRGBImage(bytes, width, height);

try {
ImageIO.write(image, "BMP", stream);
}
finally {
stream.close();
}

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

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