我正在尝试以 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/