【问题标题】:GTK+ and GdkPixbufGTK+ 和 GdkPixbuf
【发布时间】:2011-02-14 13:38:59
【问题描述】:

我想我对 GTK 有一个理解问题。我的简单应用程序有一个图像流,我想在我的 GTK 窗口中显示它们。到目前为止,它看起来像这样:

GdkPixbuf *pb = gdk_pixbuf_new_from_data(img2, GDK_COLORSPACE_RGB, 
                     FALSE, 24/3, 320, 240, 320*3,
                     NULL, NULL);
if(pb == NULL)
    fprintf(stderr, "Pixbuf is null!\n");

if(image != NULL)
    gtk_container_remove(GTK_CONTAINER(window), image);
image = gtk_image_new_from_pixbuf(pb);
gtk_container_add(GTK_CONTAINER(window), image);

printf("Updated!\n");

img2 是我的 (rgb) 缓冲区,每次都从流中更新。我猜 gtk_container_removegtk_container_add 可能会愚蠢地用于此目的?

以下是我的补充:

GtkWidget *window;
GtkWidget *image;

gtk_init(&argc, &argv);

window = gtk_window_new(GTK_WINDOW_TOPLEVEL);

gtk_signal_connect(GTK_OBJECT(window), "destroy",
           GTK_SIGNAL_FUNC(destroy), NULL);

    /* ... */
    start_routine_for_stream_that_calls_the_above(...)
    /* ... */

gtk_widget_show_all(window);
gtk_main();

我的问题是它不能以这种方式工作......要么我只看到最后一张 GdkPixbuf 图像,要么我什么也没看到,这是正确的行为......

但是我如何管理它以显示更新的 GdkPixbuf(流)

感谢您的帮助

【问题讨论】:

    标签: gtk


    【解决方案1】:

    您需要在更改图像时运行主循环。例如,您可以使用gtk_main() 并使用g_timeout_add() 来安排您的回调每秒运行一次并替换该回调中的图像。

    【讨论】:

    • 啊,好的,谢谢,我会看看它.. 你觉得 gtk_container_remove 和 gtk_container_add 怎么样?这是正确的方法吗?
    • @Daniel:但是,有gtk_image_set_from_pixbuf() 功能。重用相同的GtkImage 应该更容易。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-07
    • 1970-01-01
    • 2012-05-03
    • 1970-01-01
    • 2023-04-04
    相关资源
    最近更新 更多