【发布时间】:2015-11-22 09:52:05
【问题描述】:
我正在尝试将动画 gif 的所有帧提取到缓冲图像数组中。我一直在阅读Convert each animated GIF frame to a separate BufferedImage,将每一帧写入一个单独的文件相当容易。但是当我尝试用框架填充 ArrayList 而不是编写它们时,我的问题就出现了。 ArrayList 中的每张图片都只是 gif 的最后一帧。
为了更清楚,这段代码将把每一帧都写成完美的分隔文件:
ArrayList<BufferedImage> frames = new ArrayList<BufferedImage>();
BufferedImage master = new BufferedImage(128, 128, BufferedImage.TYPE_INT_ARGB);
ImageReader ir = new GIFImageReader(new GIFImageReaderSpi());
ir.setInput(ImageIO.createImageInputStream(gif));
for (int i = 0; i < ir.getNumImages(true); i++)
{
master.getGraphics().drawImage(ir.read(i), 0, 0, null);
ImageIO.write(master, "gif", new File(dirGifs + "/frames" + i + ".gif"));
}
但是,这段代码只会给我一个充满相同帧的 ArrayList(是 gif 的最后一帧)
ArrayList<BufferedImage> frames = new ArrayList<BufferedImage>();
BufferedImage master = new BufferedImage(128, 128, BufferedImage.TYPE_INT_ARGB);
ImageReader ir = new GIFImageReader(new GIFImageReaderSpi());
ir.setInput(ImageIO.createImageInputStream(gif));
for (int i = 0; i < ir.getNumImages(true); i++)
{
master.getGraphics().drawImage(ir.read(i), 0, 0, null);
frames.add(master);
}
我以为是因为我之后没有处理图形,但我尝试创建一个图形对象并处理它,但没有任何改变。需要帮助!
【问题讨论】:
标签: java arrays image animated-gif frames