image_gdk画图PHP,GTK常用控件之图片控件( GtkImage )

图片控件和标签的作用很类似,都是作为显示用的,只是图片控件显示的内容是图片。

3d493bcf5892524bb7a572e9f6ef2a5b.png

图片控件的创建:

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 // 头文件

int main(int argc, char *argv[])

{

gtk_init(&argc, &argv); // 初始化

GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL); // 创建窗口

GtkWidget *hbox = gtk_hbox_new(TRUE, 10); // 创建水平布局容器

gtk_container_add(GTK_CONTAINER(window), hbox); // 把水平布局容器放入窗口

// 创建图片控件,这种方法创建以图片默认大小来显示,不能修改

GtkWidget *image_one = gtk_image_new_from_file("./image/1.bmp");

gtk_container_add(GTK_CONTAINER(hbox), image_one);// 添加到布局里

// 下面借助GdkPixbuf来修改图片的大小,注意接口以gdk_开头,不属于控件类

// 创建pixbuf,需要占用资源,使用完,需要人为释放

GdkPixbuf *src = gdk_pixbuf_new_from_file("./image/1.bmp", NULL);// 读取原图片

GdkPixbuf *dst = gdk_pixbuf_scale_simple(src,

100, 100, GDK_INTERP_BILINEAR);// 修改图片大小(100, 100), 保存在dst

GtkWidget *image_two = gtk_image_new_from_pixbuf(dst);// 通过pixbuf创建图片控件

g_object_unref(src);// pixbuf使用完,需要人为释放资源

g_object_unref(dst);

gtk_container_add(GTK_CONTAINER(hbox), image_two);// 添加到布局里

// 获取图片控件里的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);// 添加到布局里

// 给创建的图片控件重新设置一张图片

GtkWidget *image_four = gtk_image_new_from_file("./image/1.bmp");

src = gdk_pixbuf_new_from_file("./image/2.bmp", NULL);// 读取原图片

dst = gdk_pixbuf_scale_simple(src,

200, 200, GDK_INTERP_BILINEAR);// 修改图片大小(100, 100), 保存在dst

gtk_image_set_from_pixbuf( GTK_IMAGE(image_four), dst );// 给image_four重新设置一张图片

g_object_unref(src);// pixbuf使用完,需要人为释放资源

g_object_unref(dst);

gtk_container_add(GTK_CONTAINER(hbox), image_four);// 添加到布局里

gtk_widget_show_all(window);// 显示窗口控件

gtk_main(); // 主事件循环

return 0;

}

程序运行效果图如下:

2316e3030d5c3367b5be71b2af372a8b.png

原文:http://blog.csdn.net/tennysonsky/article/details/43057081

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值