【问题标题】:Load Gif into Gtk 3 Window C\C++将 Gif 加载到 Gtk3 Window\C++
【发布时间】:2016-12-30 17:26:43
【问题描述】:

我正在尝试使用 Gtk 3 作为图形库的 code::block 创建一个 c 应用程序 这个版本的 gtk 与 gtk 2 有点不同,在线提供的教程或示例并不多。我想使用一种名为 GdkPixmap 的类型,它允许将 gif 加载到你的窗口中,在谷歌搜索后我发现该类型已被弃用,并且已从 gtk 新版本 (3) 中删除。从官方文档(从 gtk2 迁移到 gtk3)我发现可以使用 cairo 函数来制作由 GdkPixmap 制作的作品,但我还没有找到如何更改和迁移。

这个基于stackoverflow的代码是一个使用gtk2将gif加载到窗口中的例子,它在gtk3编译器上不起作用说:错误未知类型名称'GdkPixmap'

#include <gtk/gtk.h>
#include <stdio.h>
#include <stdlib.h>

GdkPixbuf *load_pixbuf_from_file (const char *filename)
{
    GError *error = NULL;
    GdkPixbuf *pixbuf = gdk_pixbuf_new_from_file (filename, &error);

    if (pixbuf == NULL)
    {
        g_print ("Error loading file: %d : %s\n", error->code, error->message);
        g_error_free (error);
        exit (1);
    }
    return pixbuf;
}

GdkPixbufAnimation *load_pixbuf_animation_from_file (const char *filename)
{
    GError *error = NULL;
    GdkPixbufAnimation *pixbuf = gdk_pixbuf_animation_new_from_file (filename, &error);

    if (pixbuf == NULL)
    {
        g_print ("Error loading file: %d : %s\n", error->code, error->message);
        g_error_free (error);
        exit (1);
    }
    return pixbuf;
}

int main (int argc, char **argv)
{
    GtkWidget *window = NULL;
    GdkPixbuf *image = NULL;
    GdkPixbufAnimation * anim = NULL;
    GtkWidget *widget = NULL;
    GdkPixmap *background = NULL;
    GtkStyle *style = NULL;

    gtk_init (&argc, &argv);
    /* Load a non animated gif */
    image = load_pixbuf_from_file ("C://Users//Pcc//Downloads//66.gif");
    //  widget = gtk_image_new_from_pixbuf (image);
    gdk_pixbuf_render_pixmap_and_mask (image, &background, NULL, 0);
    style = gtk_style_new ();
    style->bg_pixmap [0] = background;
    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
    gtk_window_set_title (GTK_WINDOW(window), "Load Image");
    gtk_window_set_default_size (GTK_WINDOW (window), 400, 300);
    gtk_widget_set_style (GTK_WIDGET(window), GTK_STYLE (style));
    gtk_window_set_transient_for (GTK_WINDOW (window), NULL);

    GtkWidget *hbox = NULL;
    hbox = gtk_hbox_new (0, FALSE);
    gtk_container_add (GTK_CONTAINER(window), hbox);

    GtkWidget *button = NULL;
    button = gtk_button_new_with_label ("Sonic");
    gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, FALSE, 0);

    gtk_widget_show_all (window);
    gtk_main ();
    return 0;
}

使用并安装我认为不好的过时 gtk 请发布可在 gtk3 上加载 gif 的代码示例

【问题讨论】:

    标签: c gtk gtk3 cairo gtk2


    【解决方案1】:

    在官方 GTK 3 文档中有一个特定的 GdkPixmap to Cairo migration guide

    【讨论】:

    • 该链接不再有效 - 至少,那里似乎没有 GdkPixmap 到开罗的迁移指南。
    • 是的,gtk 文档在几年前从 developer.gnome.org 转移到了 gtk.org。我更新了我认为是目标的链接。否则,您仍然可以使用 archive.org 和评论发布日期(此处为 2017 年)跟踪死链接。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-03
    • 2012-05-04
    • 2013-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多