我有一个程序加载一张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颜色的整数。 –