gpt4 book ai didi

c - 在绘图区绘制图像

转载 作者:太空狗 更新时间:2023-10-29 15:11:59 24 4
gpt4 key购买 nike

我正在尝试在绘图区域上绘制图像,但没有成功。我看到了几个 python 示例,但我无法将它们实现到我正在使用的 c 中(例如 draw an image to gtk.DrawingArea?)

我已经创建了一个 Pixbuf 变量来存储我想在绘图区域上绘制的图像,但是没有像 gtk_drawing_area_draw_pixbuf 之类的函数或与此相关的函数。欢迎任何建议。

最佳答案

你需要利用expose-event回调(假设您正在使用 Gtk+ 2.0)将 pixbuf 绘制到绘图区域。没有 gtk_drawing_area_draw_pixbuf 而你有 gdk_draw_pixbuf .这已被弃用,取而代之的是 gdk_cairo_set_source_pixbuf从 2.22 版开始。您可以在这些行的公开事件回调中调用这些函数(请仅将它们用作引用):
如果你的 Gtk 版本是 < 2.22

static gboolean
da_expose (GtkWidget *da, GdkEvent *event, gpointer data)
{
(void)event; (void)data;
GdkPixbuf *pix;
GError *err = NULL;
/* Create pixbuf */
pix = gdk_pixbuf_new_from_file("/usr/share/icons/cab_view.png", &err);
if(err)
{
printf("Error : %s\n", err->message);
g_error_free(err);
return FALSE;
}
GdkDrawable *draw = gtk_widget_get_window(da);
/* Draw pixbuf */
gdk_draw_pixbuf(draw, NULL, pix, 0, 0, 0, 0, -1, -1, GDK_RGB_DITHER_NONE, 0, 0);
return FALSE;
}

从 2.22 版开始,您将不得不在这些行中使用 cairo 一些东西:

static gboolean
da_expose (GtkWidget *da, GdkEvent *event, gpointer data)
{
(void)event; (void)data;
GdkPixbuf *pix;
GError *err = NULL;
/* Create pixbuf */
pix = gdk_pixbuf_new_from_file("/usr/share/icons/cab_view.png", &err);
if(err)
{
printf("Error : %s\n", err->message);
g_error_free(err);
return FALSE;
}
cairo_t *cr;
cr = gdk_cairo_create (da->window);
gdk_cairo_set_source_pixbuf(cr, pix, 0, 0);
cairo_paint(cr);
cairo_fill (cr);
cairo_destroy (cr);
return FALSE;
}

当然,您会使用 g_signal_connect(比如 g_signal_connect (da, "expose-event", G_CALLBACK (da_expose), NULL);)连接到回调。如果您使用的是 Gtk+ 3.0,那么您将使用 draw而不是 expose-event。您始终可以引用 gtk-demo/gtk3-demo 应用程序,这些应用程序可用于查看示例和代码。这应该在您的发行版的软件包存储库中可用,或者您始终可以从源代码中获取它。
希望这对您有所帮助!
附:This link可能会为您提供一些指导

关于c - 在绘图区绘制图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10250748/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com