使用 XIElib 开发图像应用

作者:Michael J. Hammel
Developing Imaging Applications with XIElib
  • 作者:Syd Logan

  • 出版社:Prentice Hall

  • 网址:http://www.prenhall.com/

  • 价格:54 美元

  • ISBN:0-13-442914-1

  • 评论者:Michael J. Hammel

近年来,Linux 用户的计算机图形技术取得了长足的进步。各种应用程序开始在许多地方涌现,它们来自开源社区和商业供应商。这种近期增长的一个原因是原生窗口系统的灵活性和可扩展性:X 窗口系统,也称为 X11。虽然最终用户是这种灵活性的受益者,但 Linux 的开发方面将对 X11 最不为人所知的扩展之一——X 图像扩展——最感兴趣。

正如其名,X 图像扩展不是核心 X11 发行版的一部分,尽管任何使用 X11 Release 6(又名 X11R6)的系统都应包含此扩展。X 图像扩展,更常见的名称是 XIE,为 X11 的客户端/服务器环境中的图形图像管理提供了一种机制。例如,图像解压缩可以在服务器端(显示端)处理,而不是让客户端承担这项常见且消耗资源的任务。

不久前,《使用 XIElib 开发图像应用》的作者 Syd Logan 就此扩展联系了我,并建议 GIMP 开发者关注它。当时,我适度参与了 GIMP 的开发,那时 GIMP 还是一个 Motif 应用程序的早期阶段。XIE 似乎从未在 GIMP 的开发者社区中流行起来。也许仅仅是因为没有可用于学习 API(应用程序编程接口或 XIE 软件库的接口)的文本。这也可能是因为当时并非所有开发者都在 Linux 上,而且并非所有 UNIX 供应商都已迁移到 X11R6,这种情况一直持续到今天。

尽管 GIMP 没有使用 XIE,但我仍然对 XIE 的用途很感兴趣。它有什么用?将其添加到现有应用程序有多困难?它是否有助于解决计算机图形学中一些更常见的问题,还是更侧重于特定类型的问题?

Syd 的书组织良好,并为大多数这些问题提供了答案。这本书很厚——超过 600 页——章节范围从 Xlib 中现有图像处理方法的介绍到 XIE 的 API 及其底层数据结构的细节。章节从 XIE 架构的概述,到诸如“photoflo 元素”和图像文件格式等高级概念,再到使用“process 元素”进行格式转换以及使用“techniques”(服务器端用于图像处理的算法)的更详细描述。

即使凭借我自学的图形术语经验,我发现 XIE 仍然有一整套新的术语需要学习。文本末尾包含了一个相当完整的术语表,但你会发现 Syd 在文本中给出的定义是更好的信息来源。他很好地解释了新术语,并快速地将它们融入到 XIE 的更大图景中。

随书附赠一张 CD,其中包含书中少量示例代码。CD 上的 README 文件内容详尽,在尝试构建或运行 CD 上的任何软件之前应先阅读它。CD 上的某些文件除了文件所有者外,对任何人都不可读,因此您必须以 root 用户身份从 CD 复制文件,然后执行 chown/chmod 序列才能正确安装它们。

构建 XIE 示例所需的 libtiff 和 jpeg 库不容易从 CD 构建。我从 README 文件(在 CD 的 libtiff 目录中找到)中指定的 FTP 站点下载了最新的 libtiff 源代码,并将旧版本替换为新版本。我无法对 JPEG 库执行此操作,因为 ftp//ftp.uu.net/ 的主存档位置不允许来自名称在 DNS 中无法解析的拨号主机的连接。因此,我从 GIMP 服务器 (ftp//ftp.gimp.org/pub/libs/) 获取了源代码。新版本更容易构建。但是,我没有在我的系统上安装这些库,因为我已经安装了工作版本。/xiesamples 目录将这些图像库(libtiff 和 libjpeg)的库路径硬编码为相对于示例目录。我只是构建了库,然后将默认目录(来自存档文件)重命名为 XIE CD 软件期望的目录。此后,CD 软件构建良好。

/xiesamples 目录下的示例软件涵盖了书中大部分(如果不是全部)示例。由于 CD 上的所有示例客户端都是在 Linux 上编写的,因此它们都构建良好(在更新了前面描述的两个库之后)。这里的程序是书中描述的 XIE 基本功能的小示例。摘自 CD 上的 README 文件

大多数示例适用于灰度 JPEG,少数示例适用于存储在 TIFF 文件、PGM、PPM、彩色 JPEG 或原始 SingleBand(灰度)图像中的 CCITT 图像。

不幸的是,我在我的系统上运行这些示例程序时遇到了问题。在重读 README 文件后,我发现某些示例仅适用于 8 位 PseudoColor 可视化效果。我的系统运行在 TrueColor 模式下。请查看 README 文件以获取每个示例的说明;它会告诉您是否可以指定可视化效果和/或要使用的颜色图类型。但是,在我的有限测试中,我唯一能够在 TrueColor 可视化效果下运行的示例程序是 backendtest 程序。

第 2 章对使用 Xlib 进行图像操作进行了相当不错的讨论,适合那些在理解 O'Reilly Xlib 手册时遇到问题的人。本文是编程指南,而不是参考指南。据我所知,XIE 的印刷参考指南尚不可用。

在整本书中,Syd 都提供了如何进行 XIE API 调用的示例,包括 API 中使用的注释良好的数据结构。很明显,Syd 了解 API 的来龙去脉。他提供了大量的源代码示例——我几乎每翻三页就能看到至少一段代码片段。

文本中印刷了大量的灰度示例图像,其中至少有一些图像在没有颜色的情况下会失去一些影响力。书中中间有一个八页的彩色图库。但是,这些图像仅用于解释一些通用的图形术语和技术,实际上并没有描述 XIE 本身。

我发现第 15 章是最好的章节之一,仅仅是因为它在其他图形领域的应用。色彩空间转换是一项常见的任务,但许多 Linux 图形应用程序对它的支持并不好。例如,在本章的第三段中,我了解到

YCbCr 图像将颜色和亮度表示为图像中的单独通道。人类对亮度的变化比对颜色的变化更敏感,[因此] 压缩算法可以对色带应用比亮度带 (Y) 更高的压缩率,而不会降低图像的可感知质量。

这类信息在解释了为什么 XIE 支持某些色彩空间的同时,也提供了适用于其他色彩管理工具的定义。

本文没有很好地涵盖的一个问题是 XIE 如何与 OpenGL 或 Mesa 等工具一起使用(如果可以一起使用的话)。将两者结合起来可能没有意义,但似乎没有提及 XIE 如何融入 X11 核心功能、扩展和第三方图形库的整体集合中。

总结

Syd Logan 的著作是一部内容广泛的作品,它全面地介绍了 X 图像扩展。由于 Syd 曾参与 XIE 的示例实现工作,因此他完全有资格讨论这个话题。问题是 XIE 是否是您图像处理任务的正确解决方案。它将某些工作卸载到服务器的能力可能非常有利。诚然,我的图形经验可能没有那么丰富,但是随着某些 X 服务器在 x86 Linux 上的运行时大小已经增长到 20MB 以上,人们不禁要问 XIE 是否是一个好主意。认真阅读《使用 XIElib 开发图像应用》应该有助于您回答这个问题。

Developing Imaging Applications with XIElib
Michael J. Hammel (mjhammel@graphics-muse.org) 是德克萨斯理工大学计算机科学专业毕业生,是一位专门从事 X/Motif 工作的软件开发人员。Michael 在 Linux Gazette 上撰写每月专栏“Graphics Muse”,维护 Graphics Muse 网站和 Linux Graphics Mini-HOWTO,协助管理互联网光线追踪竞赛,最近完成了他的新书《The Artist's Guide to the GIMP》的创作,该书由 SSC, Inc. 出版。他的业余爱好包括跑步、篮球、泰国菜、园艺和狗。
加载 Disqus 评论