私はスプライトシートを読み込んで、シート上の各フレームの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
を想定し
Ah。最適化されたフレームを使用しないようにgifwriterの動作を編集する方法はありませんか?また、透明な背景の色は黒(0,0,0)であるように見えましたが、transparentColorIndexに0を渡しても何も影響を与えていないようです(通常の黒が消えなくても)。 –
私の知る限りではありません。 Krooのコードは不透明な画像を仮定しているようです。 '.gif'にはアルファチャンネルがありません。透明であると解釈されることを意図した色指数のみを有する。 '.png'透明度を維持する必要がある場合は、この' 'AnimatedGifEncoder'(http://www.java2s.com/Code/Java/2D-Graphics-GUI/AnimatedGifEncoder.htm)を試してみてください。 – trashgod
属性transparentColorIndexをどのように割り当てるべきか分かりますか? ARGBカラーではintではないようです。 –