gpt4 book ai didi

c - 如何在回调函数中从文件加载 GdkPixbuf?

转载 作者:太空宇宙 更新时间:2023-11-04 02:01:13 24 4
gpt4 key购买 nike

我正在使用 gtk+ 3.14,我想加载用户选择的图片。这里的代码正确显示了图片但似乎没有更新GdkPixbuf *pixbuf。事实上,GdkPixbuf 在函数内部不是 NULL 但它在它外面是 NULL。我该怎么做才能在其他函数中正确加载和使用 pixbuf?

这是回调结构:

struct callback_struct
{
GdkPixbuf *pix;
GtkWidget *img;
int height;
int width;
float scale;
};

这是我的代码:

void callback_load(gpointer data)
{
struct callback_struct *passed = data;
GdkPixbuf *pixbuf = passed->pix;
GtkWidget *image = passed->img;
int h_scr = passed ->height;
int w_scr = passed->width;
float scale = passed->scale;
GtkWidget *dial_box = gtk_file_chooser_dialog_new("Choose the image to load"
,GTK_WINDOW(gtk_widget_get_toplevel(image)),
GTK_FILE_CHOOSER_ACTION_OPEN,
"Cancel",GTK_RESPONSE_CANCEL,"Open",GTK_RESPONSE_ACCEPT,NULL);
switch (gtk_dialog_run (GTK_DIALOG (dial_box)))
{
case GTK_RESPONSE_ACCEPT:
{
gchar *filename =gtk_file_chooser_get_filename
(GTK_FILE_CHOOSER (dial_box));
pixbuf = gdk_pixbuf_new_from_file(filename,NULL);
printf("%d\n",(pixbuf == 0));
GdkPixbuf *scaled_buffer = gdk_pixbuf_scale_simple
(pixbuf,h_scr*scale,w_scr*scale,GDK_INTERP_BILINEAR);
gtk_image_set_from_pixbuf(GTK_IMAGE(image),scaled_buffer);
printf("%d\n",(pixbuf == 0));
gtk_widget_destroy(dial_box);
break;
}
case GTK_RESPONSE_CANCEL:
{
gtk_widget_destroy(dial_box);
break;
}
}
}

最佳答案

你只修改局部指针pixbuf:实际上passed->pix在整个代码中都是NULL。

你要么根本不使用局部指针(只引用 passed->pix),要么在初始化后的某个时刻将结构指针设置为等于局部指针。

关于c - 如何在回调函数中从文件加载 GdkPixbuf?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27087510/

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