Создание GIF-анимации с прозрачным фоном на VB6

Обсуждение проектов наших жителей.
Вы можете выставить проект на тест или найти помощников для его реализации.

Модератор: BV

The trick
Постоялец
Постоялец
 
Сообщения: 781
Зарегистрирован: 26.06.2010 (Сб) 23:08

Создание GIF-анимации с прозрачным фоном на VB6

Сообщение The trick » 11.03.2014 (Вт) 12:17

Набросал небольшую программку. Максимальный размер картинок 640х640. В принципе для анимаций без прозрачного фона, а также анимаций с ColorKey цветом прозрачности эта задача очень просто решается с помощью библиотеки GDI+, но у нее, как я выяснил при написании этой тестовой программы, есть недостаток - она не позволяет задать свойство восстановления фона анимации, по крайней мере в MSDN про это ни слова. Это проявляется в виде неприятного наложения кадров друг на друга, когда фон непрозрачен - это не заметно. Для предотвращения этого явления, я решил вручную находить нужные байты и править их "руками". В своем примере я также вычисляю оптимальную палитру с помощью октодерева, поэтому качество получаемых GIF-анимаций получается довольно-таки хорошим. Также имеется возможность настройки каждого кадра (длительность, порог прозрачности) и счетчика повторов. Для отключения прозрачности достаточно в поле Threshold выставить 0, чем выше значение в этом поле, тем больше полупрозрачных пикселей станут полностью прозрачными. Пример я хорошо прокомментировал , особенно в местах, где идет преобразование и сохранение.
ВНИМАНИЕ! На некоторых системах GDI+ возвращает ошибку (Win32Error) в функции GdipSaveAdd - там пример работать не будет.
Изображение
Изображение
У вас нет доступа для просмотра вложений в этом сообщении.
UA6527P

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 11.03.2014 (Вт) 12:23

Кривоус Анатолий писал(а):В своем примере я также вычисляю оптимальную палитру с помощью октодерева, поэтому качество получаемых GIF-анимаций получается довольно-таки хорошим.

Код не смотрел, но всё-таки решил спросить :)
Gif поддерживает отдельную палитру для каждого кадра, причём, каждая из палитр может содержать 256 самостоятельных цветов. Этот факт как-то учитывается?

The trick
Постоялец
Постоялец
 
Сообщения: 781
Зарегистрирован: 26.06.2010 (Сб) 23:08

Re:

Сообщение The trick » 11.03.2014 (Вт) 12:25

Qwertiy писал(а):Gif поддерживает отдельную палитру для каждого кадра, причём, каждая из палитр может содержать 256 самостоятельных цветов. Этот факт как-то учитывается?
В моем примере каждый кадр содержит свою локальную палитру вычисленную для каждого кадра.
UA6527P

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Создание GIF-анимации с прозрачным фоном на VB6

Сообщение Хакер » 11.03.2014 (Вт) 18:54

Это не кирпич. Переношу в раздел «Наши проекту».
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.


Вернуться в Наши проекты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6

    TopList  
cron