Java 使用ImageIO编写具有透明度的BMP

Java 使用ImageIO编写具有透明度的BMP,java,bufferedimage,javax.imageio,bmp,Java,Bufferedimage,Javax.imageio,Bmp,有没有人有办法在Java中以BMP的透明度存储BuffereImage?最好使用ImageIO API 由于某些原因,我无法以ARGB-BGRA格式编写BMP,即使如此。但是,我可以轻松地编写与PNG相同的图像。它还可以很好地存储没有alpha的图像,比如类型_INT_RGB或类型_3BYTE_BGR 考虑以下代码段: public static void main(String[] args) throws IOException { if (!ImageIO.write(new Bu

有没有人有办法在Java中以BMP的透明度存储BuffereImage?最好使用ImageIO API

由于某些原因,我无法以ARGB-BGRA格式编写BMP,即使如此。但是,我可以轻松地编写与PNG相同的图像。它还可以很好地存储没有alpha的图像,比如类型_INT_RGB或类型_3BYTE_BGR

考虑以下代码段:

public static void main(String[] args) throws IOException {
    if (!ImageIO.write(new BufferedImage(300, 200, BufferedImage.TYPE_INT_ARGB), "BMP", new File("foo.bmp"))) {
        System.err.println("Couldn't write BMP!");
    }
    if (!ImageIO.write(new BufferedImage(300, 200, BufferedImage.TYPE_INT_ARGB), "PNG", new File("foo.png"))) {
        System.err.println("Couldn't write PNG!");
    }
}
输出:

Couldn't write BMP!
在:


恐怕Java不支持32位BMP。您必须编写自己的或找到现有的库ImageJ,尽管我不知道它是否支持BMP。Wikipedia非常详细地介绍了文件格式,看起来非常简单,甚至给出了一个完整的32位BMP的逐字段示例。

谢谢!我也发现了,这很令人失望。。。我可能会写我自己的BMP插件。毕竟,格式很简单-
public boolean canEncodeImage(ImageTypeSpecifier type) {
    ...
    if (!(numBands == 1 || numBands == 3))
        return false;