Подробности
[В начало]
Проблема в реализации № S0662
Краткое описание
gdk_pixbuf_loader_set_size портит загружаемое анимированное изображение
Подробное описание
Если изменить размер у загружаемого анимированного изображения через gdk_pixbuf_loader_set_size, то в конце загрузки, после вызова gdk_pixbuf_loader_close, анимированное изображение будет с нужными размерами, но статическое (содержащее только один кадр).
Это и демонстрирует прикрепленный код (вызов -"test 'image_file'").
Исходя из кода, проблема в функции gdk_pixbuf_loader_close, которая и делает подмену анимированного изображения:
gboolean gdk_pixbuf_loader_close (GdkPixbufLoader *loader, GError **error) { //... if (priv->needs_scale) { //... tmp = gdk_pixbuf_animation_get_static_image (priv->animation); g_object_ref (tmp); pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB, tmp->has_alpha, 8, priv->width, priv->height); g_object_unref (priv->animation); priv->animation = gdk_pixbuf_non_anim_new (pixbuf); g_object_unref (pixbuf); //... } //... } GdkPixbufAnimation * gdk_pixbuf_loader_get_animation (GdkPixbufLoader *loader) { //... return priv->animation; } GdkPixbuf * gdk_pixbuf_loader_get_pixbuf (GdkPixbufLoader *loader) { //... if (priv->animation) return gdk_pixbuf_animation_get_static_image (priv->animation); else return NULL; }
Раздел стандарта
Gdk-pixbuf 2.6.2 API Reference, GdkPixbufLoader
Способы устранения
Указать в документации, что gdk_pixbuf_loader_set_size неприменима к анимированным изображениям. Или построить оболочку вокруг возвращаемого загрузчиком обьекта GdkPixbufAnimation, которая будет масштабировать кадры.
Компонент
gtk-gdk-pixbuf 2.6.2 or later
Статус
Исправлено в gtk+-2.11.0
[В начало]