源代码如下:
#include <gtk/gtk.h> /* 功能: 设置背景图 * widget: 主窗口 * w, h: 图片的大小 * path: 图片路径 */ void chang_background(GtkWidget *widget, int w, int h, const gchar *path) { gtk_widget_set_app_paintable(widget, TRUE); //以TRUE标准,设置APP允许窗口可以绘图 gtk_widget_realize(widget); /* 更改背景图时,图片会重叠 * 这时要手动调用下面的函数,让窗口绘图区域失效,产生窗口重绘制事件(即 expose 事件)。 */ gtk_widget_queue_draw(widget);//等待重绘制 GdkPixbuf *src_pixbuf = gdk_pixbuf_new_from_file(path, NULL); // 创建图片资源对象 // w, h是指定图片的宽度和高度 GdkPixbuf *dst_pixbuf = gdk_pixbuf_scale_simple(src_pixbuf, w, h, GDK_INTERP_BILINEAR);//修改并保存获取的图片 GdkPixmap *pixmap = NULL; /* 创建pixmap图像; * NULL:不需要蒙版; * 123: 0~255,透明到不透明 */ gdk_pixbuf_render_pixmap_and_mask(dst_pixbuf, &pixmap, NULL, 128); // 通过pixmap给widget设置一张背景图,最后一个参数必须为: FASLE gdk_window_set_back_pixmap(widget->window, pixmap, FALSE); // 释放资源 g_object_unref(src_pixbuf); g_object_unref(dst_pixbuf); g_object_unref(pixmap); } int main( int argc, char *argv[]) { gtk_init(&argc, &argv); //主窗口操作 GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(window), "设置窗口背景图"); gtk_widget_set_size_request(window, 500, 450); chang_background(window, 500, 400, "../18DataStruct/success.jpg"); // 设置窗口背景图,特别注意图片的路径 gtk_widget_show_all(window); // 显示所有部件 gtk_main(); return 0; }
本程序的过程:通过参数传递图片路径->设置APP允许窗口绘图->等待重绘制发生->为窗口创建图片资源->创建的图片要经修改并保存到dst_pixbuf中->然后才能被pixmap调用实现->实现之后要释放掉图片资源
注意:当选择图片路径的时候可以选择绝对路径或相对路径
我较倾向于绝对路径!
oyx@oyx-Inspiron-5584:~/GTK$ ls anniu box1 entry entry2 entry3.c hello2 hello3.c movies root table.c anniu.c box1.c entry1 entry2.c entry.c hello2.c hello.c picture root.c window box box.c entry1.c entry3 hello1.c hello3 menu picture.c table window.c oyx@oyx-Inspiron-5584:~/GTK$ vim picture.c
oyx@oyx-Inspiron-5584:~$ ls 18DataStruct classCode home pp.py test1.py tingchechuang.c youxi.c 1.py c.py huocheruchengchaxunxitong.c praise.py test2.c tongxue 公共的 2.py danci.c kaoshi.c -pthread test2.py t.py 模板 2test1.c dianti.c main.c qq test3.c tupian 视频 a.out dianti.h.gch migong.c reusableShapes.py test.c tupian.c 图片 background drawShape.py one.h shapes.py TEST.c turtie.py 文档 background.c examples.desktop ouyangxi shiyan.c testchazhao.c tushu.c 下载 biscuit.py 'E:课程设计 1.txt' parking.c sqlist.c testc.py vending.py 音乐 button.py file parking.h story.py test.h word.c 桌面 chat.py GTK password.py student testparking.c word.h
使用路径../18DataStruct/success.jpg即可将GTK上一级目录18DataStruct中的图片插入到GTK中的文件picture.c当中。
正是步行者,一步步登峰!