`
rubynroll
  • 浏览: 205314 次
  • 性别: Icon_minigender_1
  • 来自: Wgt
社区版块
存档分类
最新评论

Ruby/GTK应用笔记(2): Gdk::Pixbuf

阅读更多
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.zip

    跟其它界面开发包不同的是,Ruby-GNOME2不仅仅提 供界面控件,它提供了整个GNOME 2.0的环境,包含Ruby/GLib2、Ruby/ATK、Ruby/Pango、Ruby/GTK2、Ruby/GnomeCanvas2、Ruby /GNOME2、Ruby/GnomeVFS、Ruby/GtkHtml2、...

    OpenCV3.2 vc12编译的Lib,Dll

    2 个文件 60,647,424 字节 \vc12\dll\x86 的目录 2018/12/07 11:38 &lt;DIR&gt; . 2018/12/07 11:38 &lt;DIR&gt; .. 2018/12/07 11:38 &lt;DIR&gt; Release 0 个文件 0 字节 \vc12\dll\x86\Release 的目录 2018/12/07 11:38 ...

    gdk-pixbuf-xlib:gdk-pixbuf的Xlib依赖部分

    总结,GDK Pixbuf-Xlib是GDK Pixbuf在X11环境下的实现,它结合了GDK Pixbuf的图像处理能力和Xlib的图形绘制功能,为GTK+应用程序提供了强大而灵活的图像显示支持。理解和掌握这部分内容对于开发高质量的Linux桌面...

    基于C gtk/gtk+ sqlite3选课系统的开发

    2. **用户界面设计**:使用GTK+创建用户登录界面,允许学生和教师输入凭据。此外,设计主界面,包含课程列表、个人信息查看、选课和退课等功能。 3. **数据操作**:编写C代码来与SQLite3数据库进行交互,包括查询...

    gtk开发环境搭建

    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-...

    用 GTK+和GDK开发linux图形用户界面应用

    #include &lt;gtk/gtk.h&gt; 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+Codeblock完整版

    现在,你已经在CentOS上成功安装了GTK+、Libglade和Codeblock,可以开始使用Codeblock创建和开发基于GTK+的GUI应用程序了。在Codeblock中,你可以编写C或C++代码,利用Libglade的XML文件来设计用户界面,然后编译和...

    gdk-pixbuf-2.36.11

    9. 应用场景:GDK-Pixbuf在图形界面软件、图像编辑工具、多媒体播放器等各种需要处理图像的项目中都有广泛应用。例如,著名的开源办公套件LibreOffice和音乐播放器Rhythmbox就依赖GDK-Pixbuf来显示图像。 总之,GDK...

    PDF电子书《用GTK+和GDK开发Linux图形用户界面应用》

    根据给定的信息,我们可以推断出《用GTK+和GDK开发Linux图形用户界面应用》是一本专注于使用GTK+和GDK在Linux环境下构建GUI应用程序的专业书籍。虽然提供的部分内容并没有直接涉及具体的技术细节,但我们可以结合...

    gtk:https的只读镜像

    官方下载位置 官方网站 官方开发者博客 讨论区 每晚的文档可以在以下位置找到Gtk: : Gdk: ://gnome.pages.gitlab.gnome.org/gtk/gdk/ Gsk: ://gnome.pages.gitlab.gnome.org/gtk/gsk/建造和安装为了构建GTK,...

    输入法环境变量XMODIFIERS/GTK_IM_MODULE

    一般情况下,XMODIFIERS的优先级高于GTK_IM_MODULE,即当我们同时设定这两个环境变量时,在GTK+2的应用程序里优先使用的是XMODIFIERS指定的X输入法。 那么,GTK immodule相比XIM有什么优点呢?首先,GTK immodule不...

    gtk安装文档

    1. 进入`/opt/gtk/bin`目录。 2. 执行`./gtk-demo`。 - 如果成功出现GTK的示例图形界面,则表明GTK已正确安装。 #### 五、总结 通过以上步骤,我们已经完成了GTK及其相关依赖库的安装。这些步骤适用于CentOS 5.1...

    GTK进阶学习:设置窗口背景图(可指定其大小)源代码

    GTK提供`gdk_pixbuf_scale_simple()`函数来实现这一目标。例如,如果你想将图像缩放到窗口的宽度和高度,可以这样做: ```c int window_width, window_height; gtk_window_get_size(GTK_WINDOW(window), &window_...

    GTK+GNOME程序设计PDF(高清)2

    本书详细介绍了两种Linux图形用户界面开发技术:GTK+/GNOME。主要内容包括:GUI的基本概念,GLib,GTK+及GNOME的简介,各种GUI元素的创建与使用,bIDE,Glade等等。最后通过两个综合实例来巩固所学知识。本书实例...

    GDK 函数说明(英文)

    2. **事件处理**:GDK事件系统是其核心特性之一,它能够捕获和处理各种用户交互事件,如键盘输入、鼠标点击、窗口移动等。`gdk_event_get_type()`用于获取事件类型,而`gdk_event_handle()`则是用来处理接收到的事件...

    GDK基础.pdf

    8. Linux、GTK+和Windows:GDK原生支持Linux上的X Window系统,但GTK+可以被移植到其他操作系统上,例如通过Win32后端在Microsoft Windows上运行。 9. 多窗口系统(Multiple Windows):在GDK中,可以创建多种类型...

    Gtk设置透明按键以及设置背景图

    在GUI(图形用户界面)开发中,Gtk是一个广泛使用的库,尤其在Linux系统中,它为开发者提供了创建美观且功能丰富的应用程序的工具。本篇我们将深入探讨如何在Gtk中实现透明按键以及设置背景图片,这些都是提升应用...

    eclipse-cpp-2023-06-R-linux-gtk-x86-64.tar.gz

    《Eclipse C++ IDE在Linux x86_64环境中的深度解析与应用》 Eclipse作为一款全球知名的开源集成开发环境(IDE),被广泛应用于各种编程语言的开发,尤其在C++领域,Eclipse CDT(C/C++ Development Tools)提供了...

Global site tag (gtag.js) - Google Analytics