Конвертировать GIcon в GdkPixbuf

Я использую GAppInfo/GDesktopAppInfo.

GIcon *icon = gtk_app_info_get_icon (G_APP_INFO(appinfo));

Теперь мне нужно поместить его в GtkIconView, но я обнаружил, что нет способа создать GdkPixbuf из GIcon. Кто-нибудь знает это? Спасибо большое!

РЕДАКТИРОВАТЬ 1: На самом деле это GThemedIcon.

2 ответа

Решение

Из документов:

GIcon не предоставляет фактическое растровое изображение для значка, поскольку это выходит за рамки GIO, однако реализации GIcon могут содержать имя значка (см. GThemedIcon) или путь к значку (см. GLoadableIcon).

Однако знание имени значка может облегчить получение фактического изображения. Например, проект file-roller использует следующую функцию для получения pixbuf из GtkIconTheme и GThemedIcon:

GdkPixbuf *
get_icon_pixbuf (GtkIconTheme *icon_theme,
         GThemedIcon  *icon,
         int           size) 
{
    char        **icon_names;
    GtkIconInfo  *icon_info;
    GdkPixbuf    *pixbuf;
    GError       *error = NULL;

    g_object_get (icon, "names", &icon_names, NULL);

    icon_info = gtk_icon_theme_choose_icon (icon_theme, (const char **)icon_names, size, 0);
    pixbuf = gtk_icon_info_load_icon (icon_info, &error);
    if (pixbuf == NULL) {
        g_warning ("could not load icon pixbuf: %s\n", error->message);
        g_clear_error (&error);
    }

    gtk_icon_info_free (icon_info);
    g_strfreev (icon_names);

    return pixbuf;
}

Пожалуйста, посмотрите следующий код для получения файла значков из GIcon:

GtkIconInfo *pGtkIconInfo;
Gicon *pgIcon=gtk_app_info_get_icon (G_APP_INFO(appinfo));

GtkIconTheme *pGtkIconTheme= gtk_icon_theme_get_default();
pGtkIconInfo=gtk_icon_theme_lookup_by_gicon(pGtkIconTheme,pgIcon,256,GTK_ICON_LOOKUP_USE_BUILTIN);

//get icon filename if icone 256*256 exist.

printf("%s\n",gtk_icon_info_get_filename(pGtkIconInfo));
Другие вопросы по тегам