您的位置:首页 > 其它

GTK常用控件之图片控件( GtkImage )

2015-07-28 11:49 375 查看
图片控件和标签的作用很类似,都是作为显示用的,只是图片控件显示的内容是图片。



图片控件的创建:

GtkWidget *gtk_image_new_from_file( const gchar *filename );

filename:图片的名字,带路径的话需要加上路径( 相对或绝对 )

返回值:图片控件指针

通过上面方法创建的图片控件,以图片默认大小来显示,不能修改其大小。如果要改变图片的大小,我们要借助图片资源对象GdkPixbuf,需要注意的是,GdkPixbuf不属于控件类,它以 Gdk 开头。

图片资源对象pixbuf的创建:

GdkPixbuf *gdk_pixbuf_new_from_file(

const gchar *filename, GError **error);

filename:图片的名字,带路径的话需要加上路径( 相对或绝对 )

error:储存错误的指针

返回值:pixbuf指针

设置图片的大小:

GdkPixbuf *gdk_pixbuf_scale_simple(

const GdkPixbuf *src, int dest_width,

int dest_height, GdkInterpType interp_type);

src:gdk_pixbuf_new_from_file()的返回值

dest_width:图片的宽度

dest_height:图片的高度

interp_type:是一个枚举变量,标志图片的加载速度和质量,常用GDK_INTERP_BILINEAR

返回值:指定大小好的pixbuf指针

通过gdk_pixbuf_new_from_file(), gdk_pixbuf_scale_simple()创建的pixbuf,它会动态分配空间,占用资源,用完后,需要人为释放资源。

释放资源:

void g_object_unref(GtkObject *object);

object:需要释放的对象

通过pixbuf来创建图片控件:

GtkWidget *gtk_image_new_from_pixbuf(

GdkPixbuf *pixbuf );

pixbuf:指定好大小的pixbuf

返回值:图片控件指针

图片控件重新设置一张图片(pixbuf):

void gtk_image_set_from_pixbuf(

GtkImage *image, GdkPixbuf *pixbuf );

image:图片控件指针

pixbuf:指定好大小的pixbuf

例子代码如下:

#include <gtk/gtk.h>

int main(int argc,char *argv[])
{
//1.gtk环境的初始化
gtk_init(&argc, &argv);

//2.创建一个窗口window
GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL);

//3.创建一个水平布局容器hbox
GtkWidget *hbox = gtk_hbox_new(TRUE, 10);
//将hbox添加到window
gtk_container_add(GTK_CONTAINER(window), hbox);

//4.创建一个图片控件
GtkWidget *image_one = gtk_image_new_from_file("./img/1.png");
//将image_one添加到hbox
gtk_container_add(GTK_CONTAINER(hbox), image_one);

//5.通过GdkPixbuf来写该图片大小
//5.1创建pixbuf,需要占用资源,使用完需要释放
GdkPixbuf *src = gdk_pixbuf_new_from_file("./img/2.png", NULL);
//5.2修改图片大小
GdkPixbuf *dst = gdk_pixbuf_scale_simple(src,100,100,GDK_INTERP_BILINEAR);
GtkWidget *image_two = gtk_image_new_from_pixbuf(dst);
//5.3pixbuf使用完需要释放其中资源
g_object_unref(src);
g_object_unref(dst);
//5.4将image_two添加到hbox中
gtk_container_add(GTK_CONTAINER(hbox), image_two);

//6.获取图片控件里的pixbuf,并以这个pixbuf又重新创建一个控件
GdkPixbuf *tmp = gtk_image_get_pixbuf(GTK_IMAGE(image_two));
GtkWidget *image_three = gtk_image_new_from_pixbuf(tmp);
gtk_container_add(GTK_CONTAINER(hbox), image_three);

//7.给创建的图片控件重新设置一张图片
GtkWidget *image_four = gtk_image_new_from_file("./img/1.png");
gtk_container_add(GTK_CONTAINER(hbox), image_four);
//更换图片
src = gdk_pixbuf_new_from_file("./img/4.png", NULL);
dst = gdk_pixbuf_scale_simple(src,200,200,GDK_INTERP_BILINEAR);
gtk_image_set_from_pixbuf(GTK_IMAGE(image_four), dst);

//8.显示所有控件
gtk_widget_show_all(window);

//9.主事件循环
gtk_main();

return 0;
}


运行结果:



源码下载:http://download.csdn.net/download/lianghe_work/8939307

转自:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: