2012-06-08 3 views
1

Я использую GifDecoder, чтобы прочитать анимированный файл .gif и AnimGifEncoder, чтобы написать его. (link)Кодирование прозрачного анимированного gif в Java

Если я показываю исходные кадры, прочитанные GifDecoder, они отображаются правильно и прозрачны, но если я покажу фреймы, созданные с помощью AnimatedGifEncoder, прозрачность будет неправильной.

GifDecoder gif = new GifDecoder(); 
    gif.read("image.gif"); 

    AnimatedGifEncoder e = new AnimatedGifEncoder(); 
    e.start("newimage.gif"); 
    e.setTransparent(Color.BLACK); 

    for (int i=0;i<gif.getFrameCount();i++) { 
     anim.addFrame(gif.getFrame(i)); 
     anim.setDelay(gif.getDelay(i)); 
    } 

    anim.finish(); 

В этом примере я установил прозрачный цвет в черный цвет. Но на самом деле я хочу получить прозрачную информацию о цвете от GifDecoder, но я не знаю, как это сделать.

+0

Выполняет ли [GIFanim] (http://pscode.org/gifanim/) кодирование изображения так, как вы ожидаете? Если это так, я могу соблазнить вывести код и подытожить его для ответа. –

ответ

1

Я использую следующее решение, хотя есть еще некоторые GIF файлы, которые беспорядок после масштабирования ...:

(по крайней мере, кажется, ладить с большинством непрозрачных гифы)

Color transparentColor = null; 
BufferedImage firstFrameImage = ImageIO.read([sourceFileHere]); 

if (firstFrameImage.getColorModel() instanceof IndexColorModel) { 
    IndexColorModel cm = (IndexColorModel) firstFrameImage.getColorModel(); 
    int transparentPixel = cm.getTransparentPixel(); 
    transparentColor = new Color(cm.getRGB(transparentPixel), true); 
} 

e.setTransparent(transparentColor); 
Смежные вопросы