我有一個程序加載一張spritesheet,在圖紙上創建每個幀的BufferedImages,並將其寫入一個動畫gif。使用Elliot Kroo提供的關於Creating animated GIF with ImageIO?的課程,我能夠成功輸出文件。然而,這個gif沒有完全正確的動畫。我提供的工作表是一個帶有透明背景的.png,因此每個後續幀都放在最後一幀的頂部,通過透明背景顯示差異(Example)。下面是使用GIF作家代碼:從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的陣列(我也檢查,似乎並不成爲問題)。這是.gifs還是Java ImageWriters的限制?或者我可以在某處編輯一個設置來防止這種情況發生?如果我不需要,我寧願不放置背景。
啊。有沒有辦法編輯gifwriter的行爲不使用優化的框架?此外,透明背景的顏色似乎是黑色(0,0,0),但爲transparentColorIndex傳遞0似乎不會影響任何內容(即使正常黑色也不會消失)。 –
據我所知不是。 Kroo的代碼似乎假設不透明的圖像。 '.gif'缺少一個alpha通道;它只有一個顏色索引被認爲是透明的。如果你需要保留'.png'透明,你可以試試['AnimatedGifEncoder'](http://www.java2s.com/Code/Java/2D-Graphics-GUI/AnimatedGifEncoder.htm)。 – trashgod
你知道我應該分配屬性transparentColorIndex嗎?它似乎不是ARGB顏色的整數。 –