2017-08-03 2 views
0

BufferedImageをJavaでBMPとして透過的に保存する方法はありますか?好ましくはImageIO APIを使用する。ImageIOを使用して透明度を持つBMPを書き込む

the BMP has supported alpha channel since, at least, Win95でも、何らかの理由でARGB(BGRA)形式でBMPを書き込めません。しかし、私はPNGと同じイメージを簡単に書くことができます。また、TYPE_INT_RGBTYPE_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! 

答えて

1

BMPImageWriterSpiに:私はJavaは32ビットのBMPをサポートしていません怖い

public boolean canEncodeImage(ImageTypeSpecifier type) { 
    ... 
    if (!(numBands == 1 || numBands == 3)) 
     return false; 

は、次のコードスニペットを考えてみましょう。あなたは自分で書くか、既存のライブラリを見つけなければなりません(ImageJはBMPをサポートしているかどうかわかりませんが気になります)。 Wikipediaはファイルフォーマットに非常に精巧であり、32ビットBMPのフィールドごとの完全な例を提供しても非常に簡単です。

+0

ありがとうございます!私もそれを見つけましたが、これはかなり残念です...私はおそらく自分のBMPプラグインを書くだけです。結局のところ、フォーマットは非常に単純です。 :-) – haraldK

関連する問題