简单的图形化屏幕和窗口捕获

转自:http://www.ibm.com/developerworks/cn/aix/library/au-screenshots2/,感谢William von Hagen

为什么要捕获屏幕、窗口和对话框?

尽管许多技术作家不愿意承认,但是一张图片常常胜过千言万语。大多数良好的技术文档都包含一般称为屏幕捕获 或屏幕快照 的图像,它们显示在应用程序中出现的窗口和对话框。在文档中包含图像可以让用户更熟悉应用程序,因为这些图像在上下文中显示菜单、对话框和一般的程序交互,所以用户可以看到究竟要做什么以及在他们操作时应用程序的外观。

捕获这种图像不只是技术作家的任务。图形化应用程序的大多数市场营销资料都包含应用程序界面的关键部分的屏幕快照,或者执行复杂工作时的应用程序屏幕快照,从而说明应用程序功能的外观。提交过软件缺陷报告的任何人都知道实际显示问题的屏幕快照要比书面或口头的描述可信得多。通过屏幕快照说明问题还让开发人员更容易找到问题的根源。

UNIX 和 Linux 屏幕捕获概述

所有现代的 Linux® 和 UNIX® 系统都提供某种图形化桌面,其中常常包含至少一个图形化屏幕捕获实用程序 — 常常是专门针对特定桌面环境的实用程序。例如,GNOME 提供 gnome-screenshot,KDE 提供 KSnapshot。但是,运行 X Window 系统的所有 Linux 和 UNIX 系统都包含命令行实用程序 xwd,可以使用它轻松地捕获整个屏幕、窗口、显示下拉菜单的窗口甚至对话框。

本文的下面几节讨论使用 xwd 工具从 UNIX 或 Linux 系统的图形化显示捕获不同类型的图像的各种方法。

xwd 实用程序简介

自从上世纪 80 年代 Massachusetts Institute of Technology (MIT) 项目 Athena 的早期以来,X Window Dump (xwd) 实用程序一直是 X Window 系统的组成部分。目前,大多数 X11 发行版仍然包含它。可以使用 xwd 实用程序捕获整个屏幕(通过捕获 X11 根窗口),也可以使用鼠标或在命令行上指定窗口 ID,从而捕获特定的窗口。单个窗口的图像可以只包含窗口本身,也可以包含菜单和覆盖在它上面的对话框。

最简单的 xwd 命令行如下所示:

    xwd > filename.xwd

在执行此命令时,它显示一组十字瞄准线。通过右键单击窗口,使用十字瞄准线选择要捕获的窗口。然后,命令使用 shell 重定向把输出写到 filename.xwd 文件中。xwd 命令还提供命令行选项 -out,它让您能够在命令行上指定输出文件名,这样就不需要 shell 重定向了,如下所示:

    xwd -out filename.xwd

无论如何指定输出文件,xwd 命令的输出都是采用一般格式(称为 xwd 格式)的窗口图像。可以使用很容易找到的实用程序把它们转换为更标准的图形格式(在下一节中讨论),比如 Portable Network Graphics (PNG)、Joint Photographic Experts Group (JPEG) 或 Graphics Interchange Format (GIF)。

把 xwd 图像转换为更流行的格式

有几种图像处理和转换工具包在几乎所有 Linux 和 UNIX 系统上都可用。其中最常用的是 ImageMagick 和 Netpbm 工具包(更多信息见 参考资料)。使用最广泛的可能是 ImageMagick 工具包,许多 UNIX 系统的 Linux 工具发行版都包含它(比如 IBM AIX Toolbox for Linux Applications CD)。

ImageMagick 工具包包含许多用于图形转换和操纵的实用程序。它包含的 import 实用程序提供替代 xwd 的命令行实用程序。对于使用 xwd 文件,其中最重要的实用程序是 convert,可以使用它转换图像的格式。指定图像转换的目标格式的方法是,在输出文件名前面加上图像格式的缩写,或者作为输出文件的文件扩展名指定目标图像格式。例如,下面两个命令会生成 PNG 格式的输出文件:

    convert filename.xwd PNG:filename.image
    convert filename.xwd filename.png

如果不希望让输出文件采用表示格式的文件扩展名,通过前缀指定输出格式是很方便的。图 1 是一个简单的 GNOME 终端窗口的屏幕捕获,它已经转换为 PNG 格式了。

图 1. 转换后的终端窗口屏幕捕获

转换后的终端窗口屏幕捕获

捕获整个屏幕

前面使用 xwd 命令的示例要求交互式地选择特定窗口。在某些情况下,可能希望捕获整个屏幕,从而同时显示多个应用程序窗口的内容和位置。xwd 命令提供了 -root 选项,可以用它通过捕获 X Window 系统根窗口捕获整个屏幕,X Window 系统根窗口是包含显示的所有其他 X Window 系统窗口和对话框的全屏窗口。下面的命令捕获整个屏幕并把它写到 full-screen.xwd 文件中:

    xwd -root -out full-screen.xwd

在使用 -root 选项时,xwd 命令不是交互式的,因为要捕获屏幕上的所有东西。如果需要捕获处于特定状态的特定窗口,比如显示某个菜单或其他交互操作,可以推迟捕获根窗口的时间(让您有时间按希望的方式设置屏幕)。这要使用在所有 UNIX 和 Linux 系统上都有的 sleep 命令,它会等待指定的秒数,如下所示:

    sleep 15 ; xwd -root -out full-screen.xwd

这个命令序列延迟 15 秒执行 xwd 命令,让您有时间打开希望捕获的菜单或对话框。

捕获特定的窗口

当不带参数地执行时,xwd 命令要求交互式地选择希望捕获的窗口。如果希望显示特定的菜单,这会造成问题。在大多数情况下,选择窗口的操作是鼠标事件,当正在处理其他任何鼠标事件(比如选择菜单项)时无法处理它。如果在有未完成的鼠标事件的情况下尝试捕获窗口,会产生错误消息,如下所示:

    $ sleep 10 ; xwd -out window2.xwd
    xwd: error: Can't grab the mouse.

可以使用 xwd 命令的其他命令行选项解决这个问题。可以试试的第一个选项是 -id,通过它指定要捕获的窗口的 X Window 系统 ID,这样就不需要用鼠标选择窗口。判断窗口的 X Window 系统 ID 的最简便方法是使用 xwininfo 命令,它提供窗口 ID 以及关于窗口位置和外观的大量信息。当执行 xwininfo 命令时,显示一组十字瞄准线。使用十字瞄准线单击要查看信息的窗口。xwininfo 命令及其输出的示例见 清单 1

清单 1. xwininfo 命令的节略输出
    $ xwininfo

    xwininfo: Please select the window about which you
              would like information by clicking the
	      mouse in that window.

    xwininfo: Window id: 0x2c435b4 (has no name)

    Absolute upper-left X:  1811
    Absolute upper-left Y:  99
    Relative upper-left X:  1811
    Relative upper-left Y:  99
    ...
    Corners:  +1811+99  -423+99  -423-116  +1811-116
    -geometry 1126x835+1811+99

通过使用命令输出中的窗口 ID,可以用 sleep 命令产生延迟并用 xwd 命令的 -id 选项捕获窗口和任何菜单或其他短时间出现的图形,使用的命令如下:

    sleep 15 ; xwd -id 0x2c435b4 -out window-with-menu.xwd

图 2 显示与 图 1 相同的窗口的屏幕捕获,但是还显示一个菜单。

图 2. 包含菜单的终端窗口的屏幕捕获

包含菜单的终端窗口的屏幕捕获

按 ID 指定窗口的副作用是,基于窗口 ID 的屏幕捕获可能不会捕获覆盖在指定窗口上的其他窗口,比如对话框。所有窗口(甚至对话框)都有自己的 ID,而且每次只能指定一个 ID。是否会捕获覆盖的窗口取决于使用的图形化环境。要想解决捕获覆盖窗口的问题,可以使用 xwd 命令的 -screen 选项,它指定相对于根窗口捕获窗口的内容,如下所示:

    sleep 15 ; xwd -id 0x2c435b4 -screen -out window-with-menu.xwd

-screen 选项捕获窗口在根窗口上显示的外观,因此包含所有覆盖的对话框、正在执行的菜单操作等等。

结束语

在所有 Linux 和 UNIX 发行版上都可以使用 xwd 命令,作为命令行应用程序,它提供独立于图形用户界面 (GUI) 的简便的屏幕和窗口捕获工具。通过组合使用 xwd 与 ImageMagick 和 Netpbm 等免费图形工具包,可以在平台上轻松地捕获屏幕图像,然后以文档、市场营销、bug 报告和其他用途所需的图形格式交付它们,从而更清楚地说明问题。

本文讨论的命令行屏幕和窗口捕获工具很容易使用,而且适用于所有 Linux 和 UNIX 系统,但是不同的 Linux 和 UNIX 系统也提供各种图形化工具,它们可以进一步简化屏幕和窗口图像的捕获。本系列中的下一篇文章讨论在不同的 Linux 和 UNIX 系统上可以使用的图形化屏幕捕获工具。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值