Подтвердить что ты не робот

Разделить GIF на фреймы

Попытка воспроизвести анимированные GIF файлы на Android здесь (см. Android: как отображать большой анимированный gif с указанием URL-адреса?). Это ничего, кроме гладкого. На Android 1.5 Movie.decodeStream()/decodeFile() возвращает нуль. На Android 1.6, с файлами GIF, которые у меня есть, он возвращает нулевой размер фильма с нулевой продолжительностью - явно недостаточно.

Указанный вопрос предполагает разделение GIF на фреймы (а затем их визуализацию). Как я могу это сделать, пожалуйста?

EDIT: попытался открыть один из моих GIF с GNU giflib в Windows. Он задохнулся на самом первом кадре. GIF сам по себе, все браузеры (кроме Android) отображают и оживляют его.

EDIT2: работал с giflib 4.1.4. Не уверен, что было нарушено в 4.1.6, но там вы идете. Следующий шаг: постройте giflib для Android через NDK, как-то интегрируйтесь с классом Bitmap.

EDIT3: giflib это. В сочетании с Bitmap.copyPixelsFromBuffer. Сейчас все цвета искажены, но основной дизайн кажется работоспособным.

4b9b3361

Ответ 1

giflib 4.1.4 и NDK. Вы должны вручную разрешить цвета палитры в GIF, чтобы соответствовать одному из форматов Android ARGBxxxx, а затем передать массив пикселей в объект Bitmap через copyPixelsFromBuffer(). Если вам нужна прозрачность и/или анимация, вам нужно пройти через блоки расширения и искать один с кодом 0xf9.

Разделил мой код вместе с руководством здесь: http://rathertech.blogspot.com/2014/04/splitting-gif-into-frames-on-android.html