Gdk::Pixbuf是GTK库极为重要的一个组件,从图标到图像控件,到处都可以看到它的身影,Gdk::Pixbuf让GTK使用图像资源变得轻松许多。
Gdk::Pixbuf的用法文档说的比较清楚了,就不再重复,值得注意的是,Pixbuf在内部如何存储图像文档并未详细说明,这会给使用带来一些麻烦。
1). Pixbuf#pixels: 返回的是内部像素内存的一份
拷贝,而不是引用。因此无法通过改变pixels buf而改变图像内容。这似乎很不方便,不过这种设计使得Pixbuf管理像素内存比较简单。
2). Pixbuf#pixels= :上面说过pixbuf返回的是拷贝,使得Pixbuf管理内部像素内存简单化,因此‘pixels=’这个方法实际上是不存在的(要不然就破坏了Pixbuf管理内部像素的简单性),RubyGnome网站上的文档是错误的。至少到目前为止(0.17.0-rc1),Pixbuf#pixels=方法是不存在的。
要想修改图像怎么办?可以这样:
buf = Pixbuf#pixels
buf[x] = y
new_pixbuf = Pixbuf#new(buf, colorspace, has_alpha, width, height, bps, rowstride)
3). Pixbuf#new(src, src_x, src_y, width, height): 从一个现存的Pixbuf生成新的Pixbuf对象时,两个Pixbuf共享同一个像素内存。特别的,当新的Pixbuf是旧Pixbuf的一个子区域时,尽管width已经是变小了,但是rowstride却是和原来的一样,因此要特别小心。
4). Pixbuf#pixels: 前面说过,pixels返回内部像素内存的一份拷贝,但是pixels.size到底是多大呢? 等于height * rowstride么?不然。当width不是4的整数倍是,pixbuf
有可能在32bit系统中为了优化而把rowstride凑到4的整数,但是最后一行却没有必要进行优化,因此会发现pixels.size < height * rowstride。(这里说'有可能'是因为这种优化只会发生在从文件加载而产生的新Pixbuf对象,对于从已有的像素内存产生Pixbuf对象则不会发生)。
研究Pixbuf对像素内存的管理,主要是为了在Pixbuf和其它对象互相转换时不会发生错误,例如可以从Pixbuf对象生成Camellia对象(Camellia是一个计算机图像处理库),或反之。对于一般的GTK程序,则不需要太关心pixels的格式。
分享到:
相关推荐
跟其它界面开发包不同的是,Ruby-GNOME2不仅仅提 供界面控件,它提供了整个GNOME 2.0的环境,包含Ruby/GLib2、Ruby/ATK、Ruby/Pango、Ruby/GTK2、Ruby/GnomeCanvas2、Ruby /GNOME2、Ruby/GnomeVFS、Ruby/GtkHtml2、...
2 个文件 60,647,424 字节 \vc12\dll\x86 的目录 2018/12/07 11:38 <DIR> . 2018/12/07 11:38 <DIR> .. 2018/12/07 11:38 <DIR> Release 0 个文件 0 字节 \vc12\dll\x86\Release 的目录 2018/12/07 11:38 ...
总结,GDK Pixbuf-Xlib是GDK Pixbuf在X11环境下的实现,它结合了GDK Pixbuf的图像处理能力和Xlib的图形绘制功能,为GTK+应用程序提供了强大而灵活的图像显示支持。理解和掌握这部分内容对于开发高质量的Linux桌面...
2. **用户界面设计**:使用GTK+创建用户登录界面,允许学生和教师输入凭据。此外,设计主界面,包含课程列表、个人信息查看、选课和退课等功能。 3. **数据操作**:编写C代码来与SQLite3数据库进行交互,包括查询...
gcc gtka.c -o a.exe -mms-bitfields -I/D:/gtk/include/gtk-2.0 -I/D:/gtk/lib/gtk-2.0/include -I/D:/gtk/include/atk-1.0 -I/D:/gtk/include/cairo -I/D:/gtk/include/gdk-pixbuf-2.0 -I/D:/gtk/include/pango-...
#include <gtk/gtk.h> static void activate(GtkApplication *app, gpointer user_data) { GtkWidget *window; GtkWidget *label; window = gtk_application_window_new(app); gtk_window_set_title(GTK_...
现在,你已经在CentOS上成功安装了GTK+、Libglade和Codeblock,可以开始使用Codeblock创建和开发基于GTK+的GUI应用程序了。在Codeblock中,你可以编写C或C++代码,利用Libglade的XML文件来设计用户界面,然后编译和...
9. 应用场景:GDK-Pixbuf在图形界面软件、图像编辑工具、多媒体播放器等各种需要处理图像的项目中都有广泛应用。例如,著名的开源办公套件LibreOffice和音乐播放器Rhythmbox就依赖GDK-Pixbuf来显示图像。 总之,GDK...
根据给定的信息,我们可以推断出《用GTK+和GDK开发Linux图形用户界面应用》是一本专注于使用GTK+和GDK在Linux环境下构建GUI应用程序的专业书籍。虽然提供的部分内容并没有直接涉及具体的技术细节,但我们可以结合...
官方下载位置 官方网站 官方开发者博客 讨论区 每晚的文档可以在以下位置找到Gtk: : Gdk: ://gnome.pages.gitlab.gnome.org/gtk/gdk/ Gsk: ://gnome.pages.gitlab.gnome.org/gtk/gsk/建造和安装为了构建GTK,...
一般情况下,XMODIFIERS的优先级高于GTK_IM_MODULE,即当我们同时设定这两个环境变量时,在GTK+2的应用程序里优先使用的是XMODIFIERS指定的X输入法。 那么,GTK immodule相比XIM有什么优点呢?首先,GTK immodule不...
1. 进入`/opt/gtk/bin`目录。 2. 执行`./gtk-demo`。 - 如果成功出现GTK的示例图形界面,则表明GTK已正确安装。 #### 五、总结 通过以上步骤,我们已经完成了GTK及其相关依赖库的安装。这些步骤适用于CentOS 5.1...
GTK提供`gdk_pixbuf_scale_simple()`函数来实现这一目标。例如,如果你想将图像缩放到窗口的宽度和高度,可以这样做: ```c int window_width, window_height; gtk_window_get_size(GTK_WINDOW(window), &window_...
本书详细介绍了两种Linux图形用户界面开发技术:GTK+/GNOME。主要内容包括:GUI的基本概念,GLib,GTK+及GNOME的简介,各种GUI元素的创建与使用,bIDE,Glade等等。最后通过两个综合实例来巩固所学知识。本书实例...
2. **事件处理**:GDK事件系统是其核心特性之一,它能够捕获和处理各种用户交互事件,如键盘输入、鼠标点击、窗口移动等。`gdk_event_get_type()`用于获取事件类型,而`gdk_event_handle()`则是用来处理接收到的事件...
8. Linux、GTK+和Windows:GDK原生支持Linux上的X Window系统,但GTK+可以被移植到其他操作系统上,例如通过Win32后端在Microsoft Windows上运行。 9. 多窗口系统(Multiple Windows):在GDK中,可以创建多种类型...
在GUI(图形用户界面)开发中,Gtk是一个广泛使用的库,尤其在Linux系统中,它为开发者提供了创建美观且功能丰富的应用程序的工具。本篇我们将深入探讨如何在Gtk中实现透明按键以及设置背景图片,这些都是提升应用...
《Eclipse C++ IDE在Linux x86_64环境中的深度解析与应用》 Eclipse作为一款全球知名的开源集成开发环境(IDE),被广泛应用于各种编程语言的开发,尤其在C++领域,Eclipse CDT(C/C++ Development Tools)提供了...