GTK + и GdkPixbuf - PullRequest
       5

GTK + и GdkPixbuf

1 голос
/ 01 мая 2010

Мне кажется, у меня проблема с пониманием 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_remove и gtk_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 ?

Спасибо за помощь

1 Ответ

3 голосов
/ 01 мая 2010

Вам нужно запустить основной цикл, пока вы меняете изображения. Например, вы можете выполнить gtk_main() и использовать g_timeout_add(), чтобы запланировать обратный вызов так, чтобы он выполнялся, скажем, каждую секунду и заменял изображения в этом обратном вызове.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...