以下gtk+编程例子是来自书籍《实用技术:开发Linux应用——用GTK+和GDK开发Linux图形用户界面应用》第77页的内容——像元图

书中的 GtkPixmap 自从gtk+2.0 就已经被弃用,被GtkImage取代了,也有一个GdkPixbuf,究竟如何关系和使用呢?

主要是参考《GTK常用控件之图片控件GtkImage》https://blog.csdn.net/tennysonsky/article/details/43057081
那篇博文已经解释得很清楚了,我直接抄袭过来添加解释就可以了,image_one和image_two都是从文件读取得来的,image_one是gtk可以直接显示,image_two是gdk可以修改尺寸但不能显示,要转化为gtk才能显示,image_three是从gtk构件读取得来的,此时是gdk,要转化为gtk才能显示,image_four就没有那么复杂,只是展示用2.png替换1.png而已

ruhong@localhost:/usr/share/icons/gnome> ls
128x128 22x22 256x256 48x48 icon-theme.cache scalable
16x16 24x24 32x32 8x8 index.theme
linux系统自带有许多图标都是放在/usr/share/icons/,到/usr/share/icons/gnome/256x256/随便复制两张图片分别改名为1.png和2.png,而且要与page77.c放在同一个文件夹

在openSUSE-Leap-15.3-DVD-x86_64的gnome3.34.7桌面环境下编译的,其中pkg-config --cflags --libs gtk±3.0两边有反引号括起来的
ruhong@localhost:~/gtk> gcc page77.c -o page77 pkg-config --cflags --libs gtk±3.0
ruhong@localhost:~/gtk> ./page77

/* the example on page 77 */
#include <gtk/gtk.h>
/* 准备材料,自定义函数  *//*  comments注释  *//* 程序主体 */
int main( int argc, char *argv[] )
{GtkWidget *window, *hbox, *image_one, *image_two, *image_three, *image_four;/* 声明变量window为构件gtkwidget */GdkPixbuf *source;GdkPixbuf *destination;GdkPixbuf *temporarily;gtk_init (&argc, &argv);/* 初始化gtk */window = gtk_window_new (GTK_WINDOW_TOPLEVEL);/*  创建顶级窗口 */gtk_window_set_title (GTK_WINDOW (window), "templet2");/*  为窗口顶部加上标题为templet2  */g_signal_connect (G_OBJECT (window), "destroy", G_CALLBACK (gtk_main_quit), NULL);/*  为窗口加上动作,当收到destroy信号,就启动gtk_main_quit事件,gtk_main_quit就是鼠标单击窗口右上角的关闭按钮就终止程序  */gtk_container_set_border_width (GTK_CONTAINER (window), 100);/*  简单的理解是将窗口变成容器,可以装入其它构件,构件边缘与窗口边缘的距离为100像数  */hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 10);/* 创建横向组合框 */gtk_container_add (GTK_CONTAINER (window), hbox);/* 把横向组合框装入窗口容器 *//* 方法一:创建图片控件,这种方法创建以图片默认大小来显示,不能修改 */image_one =  gtk_image_new_from_file("./1.png");/* page77.c与1.png要在同一个文件夹,./表示在当前文件夹 */gtk_container_add(GTK_CONTAINER(hbox), image_one);/* 把图片装入横向组合框容器 *//* 方法二:下面借助GdkPixbuf来修改图片的大小,注意接口以gdk_开头,不属于控件类 *//* 创建pixbuf,需要占用资源,使用完,需要人为释放 */source= gdk_pixbuf_new_from_file("./1.png", NULL);/* 读取原图片1.png,source是源头的意思 */    destination = gdk_pixbuf_scale_simple(source, 100, 100, GDK_INTERP_BILINEAR);/* 修改图片大小(100, 100), 保存在destination,destination是目标的意思 */image_two = gtk_image_new_from_pixbuf(destination);/* 通过pixbuf创建图片控件 */g_object_unref(source);g_object_unref(destination);/* pixbuf使用完,需要人为释放内存资源 */gtk_container_add(GTK_CONTAINER(hbox), image_two);/* 把图片装入横向组合框容器 *//* 方法三:获取图片控件里的pixbuf,以这个pixbuf又重新创建一个图片控件 */temporarily = gtk_image_get_pixbuf (GTK_IMAGE(image_two));/* 读取图片image_two,temporarily是临时的意思 */image_three = gtk_image_new_from_pixbuf(temporarily);/* 读取图片image_two,并变成image_three,其实image_two与image_three是一样,只是来源方式不一样而已 */gtk_container_add(GTK_CONTAINER(hbox), image_three);/* 把图片装入横向组合框容器 *//* 方法四:其实不能叫方法四,实际只是展示用2.png替换1.png而已 */image_four =  gtk_image_new_from_file("./1.png");source = gdk_pixbuf_new_from_file("./2.png", NULL);destination = gdk_pixbuf_scale_simple(source, 50, 50, GDK_INTERP_BILINEAR);/* 修改图片大小(100, 100), 保存在destination中 */gtk_image_set_from_pixbuf( GTK_IMAGE(image_four), destination );/* 用2.png替换1.png */g_object_unref(source);g_object_unref(destination);/* pixbuf使用完,需要人为释放内存资源 */gtk_container_add(GTK_CONTAINER(hbox), image_four);/* 把图片装入横向组合框容器 */gtk_widget_show_all (window);/*  显示构件窗口包括所有构件  */gtk_main ();/*  进入主循环,等待信号(鼠标键盘)输入  */return 0;
}

效果图如下

第77页的gtk+编程例子——像元图相关推荐

  1. 第69页的gtk+编程例子——工具提示

    以下gtk+编程例子是来自书籍<实用技术:开发Linux应用--用GTK+和GDK开发Linux图形用户界面应用>第69页的内容--工具提示,当鼠标停留在某个构件上几秒就会出现文字提示,书 ...

  2. GTK+编程入门(2)—GTK+程序结构

    GTK+编程入门(2)-GTK+程序结构(2015-7-23) 分类:GTK+   现在是晚上,快到睡觉时间了.把这小节完整看完是不可能了,索性就先开个头.这节的内容是通过一个最简单的GTK+程序的分 ...

  3. linux raw socket 例子,raw socket编程例子

    raw socket编程例子内容安排: 1.原始套接字介绍 1.1 原始套接字工作原理与规则 1.2 简单应用 2 FTP密码窃取器实现(简单的rootkit) 2.1 设计思路 2.2 实现 2.3 ...

  4. VIM打造GTK编程环境

    2019独角兽企业重金招聘Python工程师标准>>> VIM打造GTK编程环境 概要 本文主要介绍了使用VIM的GTK和C/C++的智能提示,GTK和C/C++同时语法高亮, C/ ...

  5. python的函数式编程实例_函数式编程例子

    函数式编程例子 [篇一:函数式编程例子] 在 08 年的时候 ( 这经历记忆犹新 ) 我也跟 lz 一样,翻了好多文章, google 了好几个星期,最后我知道它 是这么个东西: ul li 它是函数 ...

  6. 使用C语言gtk编程一个贪吃蛇游戏设计与实现

    使用C语言以及gtk编程设计一个贪吃蛇游戏. 功能需求: (1)窗口界面设计:创建各种窗口和按钮标签等: (2)小蛇移动控制:按键盘上的上下左右键控制小蛇上下左右移动: (3)游戏进程控制:若小蛇碰到 ...

  7. GTK+编程入门(1)—简介与glib库

    GTK+编程入门(1)-简介与glib库(2015-7-23) 分类:GTK+ 一:GTK+简介   GTK+是一个软件开发工具包,其设计目的是支持在 X Window系统下开发图形界面的应用程序.G ...

  8. Scratch编程思维导图_ADOPT法则_与非学堂出品

    今天给学习Scratch的朋友们介绍一个Scratch编程任务时思维套路:ADOPT法则. Scratch编程思维导图ADOPT法则与非学堂出品标题 大家可以放大来看. ADOPT法则要点: A:分析 ...

  9. 并发编程思维导图分享(包含详细知识点)

    思维导图地址: 并发编程思维导图,点此跳转 思维导图内容如下: 并发专题 并发理论知识 并发与并行 并行 指在同一时刻,有多条指令在多个处理器上同时执行.(多通路同时执行) 并发 指在同一时刻只能有一 ...

最新文章

  1. AttributeError: module ‘seaborn‘ has no attribute ‘tsplot‘
  2. 消息中间件客户端消费控制实践
  3. ios的 UIButton
  4. python3.6安装-Linux安装python3.6
  5. 工程制图 (零件图)
  6. 开发接口文档_更优更稳更好,看文档驱动开发模式在AIMS中的优势
  7. 弱网络环境下最优调度和优化传输层协议方案
  8. MD5加密、Base64加密解密
  9. I/O、Applet以及其他主题
  10. BlackMamba:C2后渗透框架
  11. a form 出口享惠情况_进出口报关
  12. Web前端性能优化优秀文章集锦
  13. 中国DCS品牌知名度调查
  14. 窃取5亿雅虎用户信息的黑客 被判处5年有期徒刑
  15. c语言闰月的计算方法,如何计算闰月如何用计算机编程? 爱问知识人
  16. Web前端-Vue中给input框赋值
  17. MTK虚拟sensor梳理
  18. intval()很重要
  19. 性能测试报告,实例讲解
  20. ansible主机清单和动态主机清单

热门文章

  1. 利用setuptools发布Python程序到PyPI,为Python添砖加瓦
  2. SpringBoot 错误页面和异常处理
  3. 抗疫周观察 | 应届毕业生忧虑就业形势,超三成企业减校招;房地产商会提出自救方案...
  4. 前端调用天气接口,返回实时和预报天气
  5. git使用某一个分支完全覆盖另一个分支
  6. SQL server求百分比
  7. 拒绝美式政治正确,他负气出走,选择来中国
  8. 360天擎造成打印机无法共享的问题解决
  9. android 圆角边框边框渐变,Android中用shape做渐变,边框,圆角等效果
  10. 郭继孚谈北京地铁“预约出行”