gdk_draw_pixbuf: assertion 'GDK_IS_DRAWABLE(drawable)'failed

发布于 2022-07-23 20:31:06 字数 2022 浏览 19 评论 5

正在学习使用gdk_draw_pixbuf和gdk_pixbuf_new_from_data两个函数,自己编写了一个例子如下:
#include <gtk/gtk.h>

#include <stdlib.h>
void close_application( GtkWidget *widget, GdkEvent *event, gpointer data )
{
        gtk_main_quit();
}

int main (int argc, char *argv[])
{
        GtkWidget *window;
        GdkPixbuf *pixbuf;
        GtkWidget *draw_able;
        guchar *frame_data=(guchar *)malloc(sizeof(guchar) *640*480 * 3);
        int i;

        gtk_init (&argc, &argv);

        window = gtk_window_new( GTK_WINDOW_TOPLEVEL);

        gtk_signal_connect (GTK_OBJECT (window), "delete_event",
                         GTK_SIGNAL_FUNC (close_application), NULL);
        draw_able = gtk_drawing_area_new ();
        gtk_widget_set_size_request (draw_able, 320, 240);
        gtk_container_add (GTK_CONTAINER (window), draw_able);
        for (i=0; i<640*480*3;i++)
        { frame_data=0x00;}

        pixbuf = gdk_pixbuf_new_from_data ( frame_data, GDK_COLORSPACE_RGB, FALSE,8,640,480, 640*3,0,0);

        gdk_draw_pixbuf ( GTK_WIDGET (draw_able)->window, NULL,pixbuf,0,0,0,0, 320,240, GDK_RGB_DITHER_NORMAL, 0, 0);
        gtk_widget_show_all (window);
        gtk_main ();

     return 0;
}

运行的时出现错误:Gdk_CRITICAL **: gdk_draw_pixbuf: assertion 'GDK_IS_DRAWABLE(drawable)'failed有谁知道的帮忙解决下,先谢过了

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

二智少女 2022-08-06 23:38:17

Thx

阳光下的泡沫是彩色的 2022-08-06 18:04:58

Description

The GtkDrawingArea widget is used for creating custom user interface elements. It's essentially a blank widget; you can draw on widget->window. After creating a drawing area, the application may want to connect to:

    *

      Mouse and button press signals to respond to input from the user. (Use gtk_widget_add_events() to enable events you wish to receive.)
    *

      The "realize" signal to take any necessary actions when the widget is instantiated on a particular display. (Create GDK resources in response to this signal.)
    *

      The "configure_event" signal to take any necessary actions when the widget changes size.
    *

      The "expose_event" signal to handle redrawing the contents of the widget.

灼疼热情 2022-08-06 06:16:19

drawarea应该是在expose的事件中去画的。

山田美奈子 2022-08-05 23:08:46

在你的gdk_draw_pixbuf()前面加一句 gtk_widget_realize(draw_able);就ok了
biach 发表于 2008-04-12 10:32

怎么还是报一样的错?

给我一枪 2022-08-03 19:31:56

在你的gdk_draw_pixbuf()前面加一句 gtk_widget_realize(draw_able);就ok了

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文