java - ImageIO.write bmp 不起作用

标签 java bmp

我正在尝试以 bmp 格式保存图像,但它不会创建任何文件。 如果我使用“png”代替,一切正常。 有什么想法吗?

//This works fine:
ImageIO.write(bi, "png", new File("D:\\MyImage.png"));

//This does not work:
ImageIO.write(bi, "bmp", new File("D:\\MyImage.bmp"));

ImageIO.getWriterFormatNames() 给我“jpg”、“bmp”、“jpeg”和其他一些..

提前致谢。

雅各布

最佳答案

我刚刚调试完一个类似的问题,我想我会在这里展示我的推理,尽管 Jakob 已经继续使用 PNG 格式。

首先,始终检查 ImageIO.write(...) 的返回值。如果找不到合适的写入器,它将返回 false,这就是当 Jakob 尝试将其写入位图时应该发生的情况。当文件的实际图像格式与“格式名称”参数中给出的格式不匹配时,就会发生这种情况。在这种情况下不会引发异常。查看文档 https://docs.oracle.com/javase/7/docs/api/javax/imageio/ImageIO.html#write(java.awt.image.RenderedImage,%20java.lang.String,%20java.io.File)

其次,使用 BufferedImage#getType() 方法检查 BufferedImage 对象的图像类型。查看可能的返回值 https://docs.oracle.com/javase/7/docs/api/java/awt/image/BufferedImage.html#getType() 。例如,如果您从 BufferedImage 对象(表示带有 alpha 分量的 PNG)获取类型为 TYPE_INT_ARGB,则使用 ImageIO.write(bi, "BMP", new File("D:\\test.bmp")) 将无法成功,并且该方法将返回 false,即使您可以在使用 ImageIO.getWriterFormatName 获取的条目列表中看到 BMP/bmp s()。您可能需要进行编码并将图像转换为所需的格式。

第三,当遇到有时会很痛苦的问题时,使用图像编辑器总是有帮助的,例如 GIMP详细检查您的图像属性。

@绿色箭头,一个小注意事项...您可以使用“bmp”或“BMP”作为图像格式值。这同样适用于其他格式。没关系。

关于java - ImageIO.write bmp 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57493760/

相关文章:

java - Struts 2 中的值未从 jsp 绑定(bind)到操作类

Java 8过滤器考虑流的多个项目

file - bmp 文件比较?

file-format - 在 Windows 上的 .bmp 文件结构中,为什么 "biSizeImage"不等于 "width * height * (biBitCount/8)"?

c - 在c中读取和写入位图

java - 注册表: 404 error

java - maven 从无处获得 ./m2/repository 中的旧 junit 依赖项

java - 当行等于列时跳过数组元素

vba - 使用 VBA 创建 BMP 图像

c# - 在不加载图像的情况下使用图像的特定像素格式在 C# 中创建位图