Подробности
[В начало]
Проблема в реализации № 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
[В начало]