2014-01-22 109 views
1

我想将我的pixbuf转换为“GtkSelectionData”,那么,如何将它转换为C++? 以下是我的示例代码。想要将“GdkPixbuf”转换为“GtkSelectionData”对象

clipboard = gtk_clipboard_get_for_display (gdk_display_get_default(), 
                GDK_SELECTION_CLIPBOARD); 
       GdkPixbuf *pixbuf; 
       pixbuf = gtk_clipboard_wait_for_image (clipboard); 

       if (pixbuf != NULL) 
       { 
        int width, height; 
        width = gdk_pixbuf_get_width (pixbuf); 
        height = gdk_pixbuf_get_height (pixbuf); 
        //printf("width : %d", width); 
        GtkSelectionData *selectionData; 
       gtk_selection_data_set_pixbuf(selectionData,pixbuf); 
       g_object_unref (pixbuf); 

       } 

Error: cannot convert ‘GdkPixbuf* {aka _GdkPixbuf*}’ to ‘GtkSelectionData* {aka _GtkSelectionData*}’ in initialization 

感谢,Jimit

回答

1

如果你看一下the documentation,你会看到,有一个功能

gtk_selection_data_set_pixbuf(GtkSelectionData*, GdkPixbuf*) 

这不正是你想要的东西。

接下来的问题是,您从哪里得到GtkSelectionData?答案是,通常,当发生丢包(或按下中键)时,GTK会运行一个回调函数,为您提供选择数据指针,并要求您使用应传输的实际字节填充它。

但是整个拖放/剪贴板的东西在GTK中非常复杂。有几个关于Gnome wiki的教程虽然有帮助,但我建议读一下他们:-)

+0

@Trishtan我正在复制一个图像并将其转换到pixbuf中,我想将该pixbuf转换为“GtkSelectionData”对象。上面的函数将帮助我得到相同的结果吗? – Jimit

+0

'GtkSelectionData'是一个结构,它包含一个指向要传输的数据的指针,以及类型和大小等其他元数据。上述函数将pixbuf指针存储在选择数据结构中,告诉GTK“这是我想要传输的原始数据”。但是您首先需要通过GTK回调交付选择数据,因此所有其他元数据都已正确填写。你很少需要自己创建一个'GtkSelectionData'。 –

+0

我修改了上面的代码。你可以看看它吗? – Jimit