2011-08-06 4 views
2

私はスプライトシートを読み込んで、シート上の各フレームのBufferedImagesを作成し、それをアニメーションgifに書き込むプログラムを持っています。 Creating animated GIF with ImageIO?でElliot Krooが提供するクラスを使用して、ファイルを正常に出力できました。しかし、gifはまったく正しいアニメーションではありません。私が提供したシートは透明な背景を持つ.pngだったので、後続のフレームはすべて最後のフレームの上に置かれ、透明な背景(Example)で表示されます。BufferedImagesからアニメーションgifを書く

ImageOutputStream output = new FileImageOutputStream(new File(savePath)); 
GifSequenceWriter writer = new GifSequenceWriter(output, data[0].getType(), delay, true); 
for(BufferedImage bi:data) 
{ 
    writer.writeToSequence(bi); 
} 
writer.close(); 
output.close(); 

データは(私もチェックしていて、問題になるとは思われない)、BufferedImageとして各フレームの配列である:ここでは、GIFライターを使用するコードです。これは.gifやJava ImageWritersの制限ですか?または、これを防ぐためにどこかの設定を編集できますか?もし私がする必要がなければ、私はむしろバックグラウンドを入れないだろう。 dataを想定し

答えて

2

GifSequenceWriterコンストラクタへimageTypeパラメータがありそう.pngファイルから読み取られたデータのためのTYPE_INT_ARGBなり、BufferedImageの配列です。 transparentColorFlagtrueと予想されますが、経験的にはtransparentColorIndexを決定する必要があります。

graphicsControlExtensionNode.setAttribute("transparentColorFlag", "TRUE"); 
graphicsControlExtensionNode.setAttribute("transparentColorIndex", ???); 

参考資料answerも参照してください。

+0

Ah。最適化されたフレームを使用しないようにgif​​writerの動作を編集する方法はありませんか?また、透明な背景の色は黒(0,0,0)であるように見えましたが、transparentColorIndexに0を渡しても何も影響を与えていないようです(通常の黒が消えなくても)。 –

+0

私の知る限りではありません。 Krooのコードは不透明な画像を仮定しているようです。 '.gif'にはアルファチャンネルがありません。透明であると解釈されることを意図した色指数のみを有する。 '.png'透明度を維持する必要がある場合は、この' 'AnimatedGifEncoder'(http://www.java2s.com/Code/Java/2D-Graphics-GUI/AnimatedGifEncoder.htm)を試してみてください。 – trashgod

+0

属性transparentColorIndexをどのように割り当てるべきか分かりますか? ARGBカラーではintではないようです。 –

関連する問題