Подробности

[В начало]

Проблема в реализации № 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

[В начало]