LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 750|回复: 5

请问一下,怎么从GttkImage得到GdkPixbuf

[复制链接]
发表于 2004-12-13 22:46:33 | 显示全部楼层 |阅读模式
我想实现一个zoom的功能, 在回调函数里, 使用传来的window参数, window里面的vbox里有一个GtkImage的控件, 想用gdk_pixbuf_scale_simple来操作, 可是, 怎么得到GdkPixbuf讷 哪位知道讷? 先谢谢拉
发表于 2004-12-14 09:58:48 | 显示全部楼层
 楼主| 发表于 2004-12-14 18:55:46 | 显示全部楼层
可是我得到的是window, 里面有个ivbox, 里面有个image. 怎么得到image讷, 我查了gtk 的文档, 没有说明
发表于 2004-12-14 20:33:56 | 显示全部楼层
看看是否这个
http://developer.gnome.org/doc/A ... tainer-get-children

那个ivbox应该是从GtkContainer继承的
 楼主| 发表于 2004-12-14 20:59:26 | 显示全部楼层
在前面window的元素是这样添加的
gtk_container_add (GTK_CONTAINER (window), vbox);
gtk_box_pack_start (GTK_BOX (vbox), toolbar, FALSE, FALSE, 0);
gtk_scrolled_window_add_with_viewport (GTK_CONTAINER (scrolled_window),
image);
gtk_container_add(GTK_CONTAINER (vbox),scrolled_window);

然后试图从传来的window中取出image

box =  gtk_bin_get_child(GTK_BIN(window));                                                                              
glist = gtk_container_get_children (box);
因为考虑到box中有toolbar和scrolled_window两个控件,所以
scrolled_window = glist->next->data;
                                                                                image =  gtk_bin_get_child(GTK_BIN(scrolled_window));   
谁知运行时错误说是这个不是image,   ,然后经过一些试验,得到
glist->data是一个image类型的., 所以就改成
     image = glist->data;                                                                 
pixbuf = gtk_image_get_pixbuf (image);
这运行错误: image不是GTK_IMAGE_PIXBUF 或者GTK_IMAGE_EMPTY 类型的, 所以不能这样用. ,没办法了, 高人指点:help
发表于 2004-12-15 09:00:30 | 显示全部楼层
这与你的 GtkImage 是如何创建的有关,可以一开始就自己创建 GdkPixbuf,然后用 gtk_image_new_from_pixbuf ()
来创建 GtkImage
http://developer.gnome.org/doc/A ... age-new-from-pixbuf

从 GtkContainer 获取控件的时候应该用一个循环检测控件的类型,然后取出自己感兴趣的控件。如果你的工程是用 glade 创建的,可以用控件的名字获取控件而不必用上面这一大堆步骤,当然你也可以参考 glade 工程的源码自己实现这种功能。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表