createdc 窗口捕获_第3部分,高级图形屏幕和窗口捕获

如本系列的第1部分第2 部分中所讨论的那样,捕获屏幕快照和程序交互记录以说明应用程序行为是技术作家,技术营销人员以及正在向应用程序提交错误报告的任何人的常见任务。 本系列的第1部分重点介绍捕获程序交互,而第2部分重点介绍使用命令行应用程序捕获图像。 本文是该系列的最后一部分,重点介绍了用于UNIX®和Linux®系统上的屏幕截图的图形应用程序。

UNIX和Linux图形屏幕捕获概述

所有现代Linux和UNIX系统都提供某种图形化桌面,通常包括至少一个图形屏幕捕获应用程序-最常见的是特定于特定桌面环境的应用程序。 例如,GNOME提供gnome-screenshot ,而KDE提供KSnapshot。 两者都可以捕获单个对话框,单个窗口以及整个屏幕。 除了这些稍微简单的内置屏幕和窗口捕获实用程序之外,Linux和大多数UNIX系统还提供了一些支持屏幕捕获的更高级的应用程序(例如GNU图像处理程序(GIMP)和Shutter)。

桌面特定的屏幕捕获实用程序

适用于大多数Linux和UNIX系统的GNOME和KDE桌面环境都包括利用这些环境的功能的屏幕快照实用程序。 这些实用程序速度快,内存需求相对较小,并且易于使用。 但是,它们不提供本文稍后讨论的更通用的应用程序的所有屏幕捕获选项和功能(请参阅常规屏幕捕获实用程序 )。

使用gnome屏幕截图

gnome-screenshot应用程序易于执行,并且对系统的要求最低,因此使其成为从GNOME桌面进行简单屏幕截图的绝佳选择。 但是,它只能捕获可移植网络图形(PNG)格式的图像,而不能提供对由GIMP和Shutter之类的应用程序提供的对象选择的细粒度控制,如本文稍后所述。

gnome-screenshot应用程序可在所有基于GNOME的Linux和UNIX计算机系统上使用。 您可以通过执行以下任一操作来调用它:

  • 选择应用程序>附件>截屏菜单命令。
  • 按“ 打印屏幕”键(有时缩写为PrtSc )。
  • Alt-Print Screen组合键。
  • 使用命令行。

gnome-screenshot应用程序在每种情况下的工作方式略有不同,因为它们使用不同的选项执行命令。

截屏菜单命令

选择“ 获取屏幕快照”菜单命令以交互方式(通过使用--interactive命令行选项)启动gnome-screenshot应用程序。 这将显示如图1所示的对话框。

图1. gnome-screenshot配置对话框
gnome屏幕截图应用程序的配置对话框的屏幕截图

打印屏幕键

按下Print Screen键将调用不带选项的gnome-screenshot应用程序,捕获整个屏幕,并显示图2所示的对话框。 在此对话框中,可以指定要将捕获的图像保存在其中的文件的名称和位置。

图2. gnome-screenshot保存屏幕截图对话框
gnome屏幕截图应用程序的保存对话框的屏幕截图

Alt-Print屏幕组合键

Alt-打印屏幕键组合(换句话说,按住Alt键和按下打印屏幕键)调用gnome-screenshot ,其应用-w选项,捕获当前窗口,并且还显示在所示的对话框图2

命令行

从命令行调用gnome-screenshot应用程序使您可以指定其任何选项。 有关所有可用选项的信息,请参阅gnome-screenshot应用程序的联机参考信息(可通过执行man gnome-screenshot命令获得)。

使用KSnapshot

KSnapshot比其GNOME等效的gnome-screenshot更加强大和灵活,但仅在KDE桌面系统或还安装了KDE桌面和相关库的GNOME系统上工作。 对于您从KDE桌面捕获的大多数屏幕截图而言,这是一个绝佳的选择。 但是,它仍然不能提供对由GIMP和Shutter之类的应用程序提供的对象选择的细粒度控制,这将在下一部分中讨论。

KSnapshot在所有基于KDE的Linux和UNIX计算机系统上都可用。 您可以通过执行以下任一操作来调用它:

  • 选择K菜单>应用程序>图形>截屏菜单命令。
  • Alt-F2组合键,然后在“运行命令”对话框中输入其名称。
  • 使用命令行。

以任何一种方式启动KSnapshot都会首先显示对话框, 如图3所示。

图3. KSnapshot配置和控制对话框
KSnapshot配置和控制对话框的屏幕快照

在选择了要捕获的图形对象的类型(从“ 捕获模式”下拉菜单中),可选的延迟以及是否包括窗口装饰之后,单击“ 新建快照”以捕获指定的对象或选定的区域。 新的屏幕截图显示在同一对话框中。 然后,您可以使用图像编辑应用程序将其打开,或者通过单击另存为并指定该文件的位置和名称将其保存到文件中。 在“ 过滤器”条目中,可以指定保存新图像时要使用的图形文件格式-选项包括“封装的PostScript(EPS)”,“联合图像专家组”(JPEG),PNG,X位图(XBM),X PixMap(XPM) )以及Microsoft®Windows®BMP和图标格式。

通用屏幕截图实用程序

前面的部分讨论了GNOME和KDE桌面默认提供的屏幕和图像捕获实用程序。 两者均提供高级功能,例如能够手动选择屏幕的一部分以进行捕获,并且仅在经过一段时间的延迟后才捕获图像,使您能够选择菜单,在对话框中显示特定项目,等等。 尽管这些内置应用程序很棒,但是其他Linux和UNIX应用程序提供的高级功能超出了基本内置应用程序的范围。

本文其余部分讨论的两个应用程序提供了令人印象深刻的钟声,甚至让最注重图像的作家也感到高兴。 第一个GIMP甚至没有设计为屏幕/图像捕获应用程序-它是一种具有屏幕捕获功能的图像编辑应用程序。 第二个是Shutter,是Perl脚本,它提供了一个出色的用户界面,用于指定,选择和管理屏幕截图。

使用GIMP

GIMP是一种流行的光栅图像编辑应用程序,几乎可用于所有现代图形计算平台,并提供许多与Adobe Photoshop相同的功能。 GIMP的集成屏幕捕获功能和复杂的图像编辑功能使其成为屏幕捕获和后续清理的自然选择。 尽管我发现Shutter是GNOME系统的一个出色且方便的屏幕捕获应用程序,但要击败GIMP提供的无处不在和强大功能,还是很困难的。

GIMP可用于所有Linux发行版,也可用于大多数其他操作系统,包括Hewlett-Packard HP-UX,IBM®AIX®,MacOS®X,Microsoft Windows以及Sun和Oracle Solaris。 (适用于AIX的GIMP可在Linux应用程序CD的AIX工具箱中找到。)GIMP提供了完善的集成图像捕获功能,使捕获的图像在捕获后可立即用于编辑。

GIMP与GNOME桌面之间的关系是造成混乱的常见原因。 GIMP不是GNOME应用程序,因此不需要在系统上安装GNOME桌面或GNOME使用的所有库。 而是,GNOME需要一个称为GIMP Toolkit(GTK)的底层图形用户界面(GUI)工具箱,顾名思义,该工具箱最初是作为GIMP的中央,可重用的组件和功能集而开发的。 因此,GIMP仅需要现代版本的GTK(GTK +,GTK2等)和一些X Window系统库(或非UNIX和非Linux系统上的等效项)即可在任何平台上运行。

要使用GIMP捕获屏幕图像,请选择File> Create> Screenshot菜单命令,该命令将显示图4所示的对话框。

图4. GIMP配置和控制对话框
GIMP配置和控制对话框的屏幕截图

该对话框使您可以指定是要捕获整个屏幕,特定窗口或对话框还是可选择区域的图像。 它还提供控件,使您可以指定在捕获窗口时是否要捕获窗口装饰,并指定捕获图像之前的延迟(以秒为单位)。

捕获图像后,GIMP会自动打开该图像进行编辑, 如图5所示。 在GIMP中完成对捕获图像的修改后,可以使用传统的“ 文件”>“另存为”菜单命令将图像保存到文件中。

图5. GIMP中的捕获图像
GIMP中捕获的图像的屏幕截图

使用快门

Shutter是需要GNOME库的Perl脚本,因此通常在运行GNOME桌面的系统上运行。 快门最初被称为gscrot因为它为名为scrot的命令行图像捕获应用程序提供了GNOME包装器。 但是,Shutter现在完全独立,不再需要scrot 。 快门为指定,选择和管理屏幕截图提供了一个出色的用户界面。

您可以从命令行启动快门,也可以从GNOME菜单中选择“ 应用程序”>“附件”>“快门”命令。 首次启动Shutter时,您可能希望通过其Edit> Preferences对话框对其进行初始配置, 如图6所示。

图6.配置快门
配置快门的屏幕截图

通过此对话框中的各个标签,您可以为所捕获的图像指定命名方案(包括基本名称和图像编号),是否在捕获的窗口图像中包括窗口装饰,应自动保存捕获的图像的格式和位置,和更多。

在完成快门配置后(或者如果您只是想直接使用它),则可以通过以下方式之一捕获图像:

  • 从“ 全屏”下拉菜单中选择要捕获的屏幕(或虚拟屏幕)以捕获全屏图像。
  • 从“ 窗口”下拉菜单中选择要捕获的窗口的名称,以捕获特定的窗口或对话框。
  • 选择“ 窗口”下拉菜单右侧的图标以捕获窗口的一部分。
  • 选择上一个图标右边的图标可以捕获单个菜单或一组级联菜单。

捕获的图像显示在“快门”中, 如图7所示。

图7.快门中捕获的图像
快门中捕获的图像的屏幕截图

快门会根据其“首选项”对话框中标识的命名方案自动保存其捕获的图像。 您还可以指定一种编号方案-如果要捕获必须按该顺序显示的一系列图像,这将非常方便。 它还在其主对话框内的单独窗格中显示所有屏幕截图,如果要验证是否已捕获了解释或记录窗口,对话框等顺序所需的所有图像,这也非常方便。 ,与特定过程相关联。 有关快门的更多信息,请参阅参考资料

摘要

本文讨论的图形屏幕捕获实用程序为不需要(或不想)从命令行工作的用户简化了屏幕捕获。

GNOME和KDE系统上提供的默认图形屏幕捕获实用程序便于进行简单的屏幕捕获,但是当您知道需要修饰这些图像或捕获多个图像时,GIMP和Shutter会提供一些显着的优势。

GIMP非常适合作为标准的屏幕捕获工具,因为它可用于所有现代台式计算机系统。 除了GNOME系统之外,我倾向于在所有地方都使用GIMP,因为它的前缀,编号和复杂的选择功能使我使用Shutter。


翻译自: https://www.ibm.com/developerworks/aix/library/au-screenshots3/index.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
setwindowdisplayaffinity函数可以用来实现抓屏窗口过滤,即只捕获指定窗口所在的显示器上的图像。 假设需要抓取指定窗口所在的显示器上的图像,可以按照以下步骤操作: 1. 获取指定窗口所在的显示器句柄,可以使用GetWindowRect函数获取窗口的位置和大小,然后使用MonitorFromRect函数获取指定窗口所在的显示器句柄。 ``` RECT rc; GetWindowRect(hWnd, &rc); HMONITOR hMonitor = MonitorFromRect(&rc, MONITOR_DEFAULTTONEAREST); ``` 2. 将指定窗口所在的显示器设置为窗口的显示亲和性,可以使用setwindowdisplayaffinity函数将窗口的显示亲和性设置为指定的显示器,同时设置WDA_EXCLUDEFROMCAPTURE参数,表示窗口不会被屏幕截图捕获。 ``` SetWindowDisplayAffinity(hWnd, WDA_MONITOR | WDA_EXCLUDEFROMCAPTURE, hMonitor); ``` 3. 使用BitBlt函数抓取指定窗口所在的显示器上的图像,可以使用CreateDC函数创建一个设备上下文句柄,然后使用BitBlt函数将指定窗口所在的显示器上的图像复制到设备上下文中。 ``` HDC hdcScreen = GetDC(NULL); HDC hdcDest = CreateCompatibleDC(hdcScreen); HBITMAP hBitmap = CreateCompatibleBitmap(hdcScreen, rc.right - rc.left, rc.bottom - rc.top); SelectObject(hdcDest, hBitmap); BitBlt(hdcDest, 0, 0, rc.right - rc.left, rc.bottom - rc.top, hdcScreen, rc.left, rc.top, SRCCOPY); ``` 4. 释放资源,释放设备上下文、位图和显示器设备上下文。 ``` ReleaseDC(NULL, hdcScreen); ReleaseDC(NULL, hdcDest); DeleteObject(hBitmap); ``` 完成以上步骤后,就可以实现抓取指定窗口所在的显示器上的图像,并且不会受到其他窗口的干扰。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值