ImageIO.write bmp不起作用

Jak*_*sen 14 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"));
Run Code Online (Sandbox Code Playgroud)

ImageIO.getWriterFormatNames() 给了我"jpg","bmp","jpeg"和其他一些......

提前致谢.

雅各布

bin*_*cob 20

我刚刚调试了类似的问题,我想我会在这里提出我的推理,尽管雅各布已经推出了PNG格式.

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

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

第三,当遇到有时可能会出现问题的问题时,使用GIMP等图像编辑器来详细检查图像属性总是有帮助的.

@Green arrow,次要注释......您可以使用"bmp"或"BMP"作为图像格式值.这同样适用于其他格式.不要紧.

  • 好的答案:此外(对我而言,这也是完成),它是指向经常使用的mkyong的链接,该链接显示了如何进行图像转换http://www.mkyong.com/java/convert-png-to-jpeg-image -file-in-java /。这也适用于bmp。 (2认同)

Sef*_*ang 6

正如@bincob所说,如果write返回false,你可以像这样重绘源图像

BufferedImage newBufferedImage = new BufferedImage(bufferedImage.getWidth(), 
bufferedImage.getHeight(), BufferedImage.TYPE_INT_RGB);
newBufferedImage.createGraphics().drawImage(bufferedImage, 0, 0, Color.WHITE, null);
Run Code Online (Sandbox Code Playgroud)

然后你可以再写一次.


Hea*_*n42 0

没有尝试,但我认为格式实际上应该是“BMP”而不是“bmp”。请尝试使用

ImageIO.write(bi, "BMP", new File("D:\\MyImage.bmp"));
Run Code Online (Sandbox Code Playgroud)

看看会发生什么。

我们看不到您的 bi 是如何构建的。

BufferedImage bufferedImage = new BufferedImage(w,h,BufferedImage.TYPE_INT_RGB);
Run Code Online (Sandbox Code Playgroud)

编码类型设置正确吗?

我认为你的 bi 已损坏,这对我来说非常有用。

BufferedImage bi = new BufferedImage(50,50,BufferedImage.TYPE_INT_RGB);
Graphics gd = bi.getGraphics();
gd.drawRect(0, 0, 10, 10);      
try {
    ImageIO.write(bi, "BMP", new File("C:\\test.bmp"));
    ImageIO.write(bi, "PNG", new File("C:\\test.png"));
} catch (IOException e) {
    System.out.println("error "+e.getMessage());
}
Run Code Online (Sandbox Code Playgroud)