2014-11-23 51 views
0

我正在使用gtk + 3.14,我想加载用户选择的图片。 这里的代码正确显示的图片,但似乎并没有更新 GdkPixbuf * pixbuf。实际上,GdkPixbuf在函数内部不是NULL,但它在外部是 是NULL。我能做些什么来正确加载和使用pixbuf在其他功能?如何从回调函数中的文件加载GdkPixbuf?

这里是回调结构:

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; 
    } 
    } 
} 
+0

@jku非常感谢你,它现在正常工作,通过传递 - > pix我的功能。 – 2014-11-23 12:10:42

回答

2

你只修改本地指针pixbuf:其实passed->pix是整个代码NULL。

您应该根本不使用本地指针(并且只需引用passed-> pix),或者在初始化它之后的某个点上将structs指针设置为等于本地指针。

相关问题