Написание анимированного GIF из BufferedImages - PullRequest
2 голосов
/ 06 августа 2011

У меня есть программа, которая загружает таблицу спрайтов, создает BufferedImages каждого кадра на листе и записывает его в анимированный GIF.Используя класс, предоставленный Эллиотом Кроо для Создание анимированного GIF с ImageIO? , я смог успешно вывести файл.Тем не менее, GIF-анимация не совсем правильно.Предоставленный мною лист был .png с прозрачным фоном, поэтому каждый последующий кадр просто помещается поверх последних кадров, а различия различаются на прозрачном фоне ( Пример ).Вот код, который использует gif Writer:

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?Или я могу где-нибудь отредактировать настройку, чтобы предотвратить это?Я бы предпочел не ставить фон, если мне не нужно.

1 Ответ

2 голосов
/ 06 августа 2011

Предполагая, что data является массивом BufferedImage, параметр imageType для конструктора GifSequenceWriter, скорее всего, будет TYPE_INT_ARGB для данных, считанных из .png файл.Я бы ожидал, что transparentColorFlag будет true, но вам придется определить transparentColorIndex эмпирически.

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

См. Также ответ .

...