CN103729174B - 截屏方法及装置 - Google Patents
截屏方法及装置 Download PDFInfo
- Publication number
- CN103729174B CN103729174B CN201210392507.7A CN201210392507A CN103729174B CN 103729174 B CN103729174 B CN 103729174B CN 201210392507 A CN201210392507 A CN 201210392507A CN 103729174 B CN103729174 B CN 103729174B
- Authority
- CN
- China
- Prior art keywords
- screenshotss
- window
- snapshot
- root view
- view object
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Landscapes
- Stored Programmes (AREA)
- User Interface Of Digital Computer (AREA)
Abstract
一种截屏方法,包括:获取窗口对象;根据所述窗口对象获取与所述窗口对象对应的根视图对象;通过所述根视图对象生成截屏图像。此外,还提供了一种截屏装置。上述截屏方法及装置可以提高操作效率。
Description
技术领域
本发明涉及计算机技术领域,特别是涉及一种截屏方法及装置。
背景技术
在传统技术中,存在多种截屏软件,可截取显示屏上当前显示的窗口的显示内容并生成图片,从而方便用户保存和展示其当前的操作场景。例如,在mac(苹果公司推出的一款操作系统)操作系统中,可将待截屏的窗口对象作为参数,通过调用截屏函数CGWindowListCreateImage来生成该窗口的截屏图像。
然而,发明人发现现有技术中至少存在如下问题:现有技术中,窗口对象分为可视窗口(Onscreen Window,显示状态为可见的窗口对象)和隐藏视窗(Offscreen Window,即已创建窗口对象但显示状态为不可见)。在截取窗口的显示内容时,只能对可视窗口调用截屏函数,而对于隐藏视窗则无法对其进行截屏。
因此,当用户希望对当前所有创建的窗口进行截屏操作时,需要先依次将所有已创建的窗口对象设置为可视窗口,然后再分别对每个窗口调用截屏函数,使得用户需要操作多次才能完成对多个窗口的截屏任务,从而降低了操作效率。
发明内容
基于此,有必要提供一种能提高操作效率的截屏方法。
一种截屏方法,包括:
获取窗口对象;
根据所述窗口对象获取与所述窗口对象对应的根视图对象;
通过所述根视图对象生成截屏图像。
此外,还有必要提供一种能提高操作效率的截屏装置。
一种截屏装置,包括:
窗口对象获取模块,用于获取窗口对象;
根视图对象获取模块,用于根据所述窗口对象获取与所述窗口对象对应的根视图对象;
截屏图像生成模块,用于通过所述根视图对象生成截屏图像。
上述截屏方法及装置,可通过窗口对象对应的根视图对象生成截屏对象,而不用预先将窗口对象的可见状态设置为“可视”后再对窗口进行截屏,使得用户在截屏时可直接对隐藏窗口进行截屏,从而减少了操作次数,提高了操作效率。
附图说明
图1为一个实施例中截屏方法的流程图;
图2为一个实施例中mac系统中的截屏方法的流程图;
图3为一个实施例中截屏装置的结构示意图;
图4为另一个实施例中截屏装置的结构示意图。
具体实施方式
在一个实施例中,如图1所示,一种截屏指令的方法,包括:
步骤S102,获取窗口对象。
窗口对象即操作系统中的窗口对应的数据结构。操作系统在通过窗口展示应用程序时,需要先创建窗口对象,然后将应用程序需要显示的内容加载到窗口对象中,最后将该窗口对象的显示属性设置为“可见”。当应用程序窗口切换时,则可将应用程序窗口对应的窗口对象的显示属性设置为“隐藏”,但窗口对象并未被注销。当应用程序推出时,则可将窗口对象注销。
在一个实施例中,窗口对象具有引用标识。可通过引用标识获取窗口对象。例如,引用标识可以是应用程序的句柄。可通过进程管理器获取当前运行的应用程序的应用标识,通过选择输入的应用标识获取应用程序的句柄,然后根据应用程序的句柄获取该应用程序对应的窗口对象。
步骤S104,根据窗口对象获取与窗口对象对应的根视图对象。
窗口和视图均为构造用户界面的可视组件。窗口为内容显示提供背景平台,而视图负责绝大部分的内容描画,并负责响应用户的交互。窗口对象和视窗对象即分别为窗口和视窗的数据结构。窗口对象中可对应多个视图对象。对应该窗口的多个视图对象继承自同一个与该窗口对象对应根视图对象。例如,mac系统中的窗口对象为NSWindow对象,根视图对象为NSThemeFrame对象。
在一个实施例中,根据窗口对象获取与窗口对象对应的根视图对象的步骤为:
获取窗口对象的用户区视图对象,根据用户区视图对象获取对应的根视图对象。
用户区视图即应用程序填充的显示内容的展示载体。窗口对象中还包括作为窗口属性、菜单栏等显示内容的载体的其他视图对象。由于用户区视图对象继承自根视图对象,可通过调用用户区视图对象获取超类(父类)的函数获取根视图对象。例如,mac系统中的contentView对象即为窗口对象NSWindow的用户区试图对象。可通过调用contentView对象的superView函数获取根视图对象NSThemeFrame。
步骤S106,通过根视图对象生成截屏图像。
根视图对象包含了所有继承该根视图对象的子视图对象的显示内容(也可以说具有获取所有继承该根视图对象的子视图对象的显示内容的接口),可通过根视图对象获取所有子视图对象的显示内容并生成图像数据完成截屏。完成截屏之后,可通过调用操作系统的内置函数将图像数据显示为图片,也可将图像数据保存为图片文件。
在一个实施例中,通过根视图对象生成截屏图像的步骤可具体为:根据根视图对象配置全局设备环境对象,通过全局设备环境对象获取图像缓存对象,通过调用图像缓存对象的截屏函数生成截屏图象。
全局设备环境对象用于处理显示内容具体的显示过程。图像缓存对象为输出显示的图像在显存中得缓存数据。可通过配置全局设备对象设置根视图对象为显示内容的来源,然后通过全局设备环境对象获取图像缓存对象,并通过调用图像缓存对象的截屏函数获取显存中的显示数据得到截屏图像。
例如,在mac系统中,可通过调用根视图对象NSThemeFrame的lockFocus函数来配置全局设备环境对象,然后通过获取NSBitmapImageRep对象,并调用该对象的InitWithFocusedViewRect函数得到截屏图像,然后再调用NSThemeFrame的unLockFocus函数释放全局设备环境对象,使全局设备环境对象可继续输出其他窗口的图像。
在本实施例中,调用图像缓存对象的截屏函数生成截屏图象的步骤可具体为:
获取窗口对象的窗口区域参数,并根据窗口区域参数调用截屏函数得到截屏图像。例如,在mac系统中可通过调用NSWindow的获取位置函数得到Rectangle类型的参数,该参数表示窗口在显示屏上占据的矩形区域。然后将该参数传递给InitWithFocusedViewRect函数,从而根据函数返回结果得到截屏图像。
在一个实施例中,在通过根视图对象生成截屏图像的步骤之前还可通过调用根视图对象的刷新函数刷新根视图对象对应的显示内容。
若不对根视图对象对应的显示内容进行刷新,则应用程序更新的显示内容则无法加载到根视图对象中去,使得根视图对象中的显示内容与实际要显示的内容不同步。因此,在获取截屏图像之前,先刷新根视图对象对应的显示内容,可使最终获取到的截屏图像为当前的显示内容。例如,在mac系统中,可通过调用根视图对象NSThemeFrame的display函数刷新根视图对象对应的显示内容。
在一个实施例中,通过调用图像缓存对象的截屏函数生成截屏图象的步骤之前还可获取输入的截屏区域。
通过调用图像缓存对象的截屏函数生成截屏图象的步骤可具体为以截屏区域作为参数调用图像缓存对象的截屏函数生成截屏图象。
截屏区域可由用户通过鼠标在显示屏上划定。在mac系统中,可将输入的截屏区域封装成Rectangle类型的参数,并传递给InitWithFocusedViewRect函数,从而得到划定的截屏区域内的图像而不是整个窗口的图像。
在一个实施例中,获取窗口对象的步骤之前还可获取一键截屏指令。获取窗口对象的步骤可具体为:根据一键截屏指令获取多个窗口对象。
也就是说,在获取一键截屏指令后,可获取当前所有已创建的窗口(包括可视窗口和隐藏窗口)对象,然后遍历获取到的窗口对象,然后对遍历到的窗口对象执行获取根视图对象并根据获取到的根视图对象生成截屏图像的步骤。使得用户可通过简单的操作即可获取当前所有的窗口的截屏图像,从而减少了用户操作的次数,提高了操作效率。
在一个实施中,如图2所示,图2示出了在mac系统中的截屏方法,包括:
步骤S202,获取NSWindow对象。
步骤S204,根据NSWindow对象获取contentView对象。
步骤S206,调用contentView对象的superView函数得到NSThemeFrame对象。
步骤S208,调用NSThemeFrame对象的display函数。
步骤S210,调用NSThemeFrame对象的lockfocus函数。
步骤S212,获取NSBitmapImageRep对象,并调用该对象的initWithFocusedViewRect函数。
步骤S214,调用NSThemeFrame对象的unLockfocus函数。
在一个实施例中,如图3所示,一种截屏装置,包括:窗口对象获取模块102、根视图对象获取模块104以及截屏图像生成模块106,其中:
窗口对象获取模块102,用于获取窗口对象。
窗口对象即操作系统中的窗口对应的数据结构。操作系统在通过窗口展示应用程序时,需要先创建窗口对象,然后将应用程序需要显示的内容加载到窗口对象中,最后将该窗口对象的显示属性设置为“可见”。当应用程序窗口切换时,则可将应用程序窗口对应的窗口对象的显示属性设置为“隐藏”,但窗口对象并未被注销。当应用程序推出时,则可将窗口对象注销。
在一个实施例中,窗口对象具有引用标识。窗口对象获取模块102可用于通过引用标识获取窗口对象。例如,引用标识可以是应用程序的句柄。窗口对象获取模块102可用于通过进程管理器获取当前运行的应用程序的应用标识,通过选择输入的应用标识获取应用程序的句柄,然后根据应用程序的句柄获取该应用程序对应的窗口对象。
根视图对象获取模块104,用于根据窗口对象获取与窗口对象对应的根视图对象。
窗口和视图均为构造用户界面的可视组件。窗口为内容显示提供背景平台,而视图负责绝大部分的内容描画,并负责响应用户的交互。窗口对象和视窗对象即分别为窗口和视窗的数据结构。窗口对象中可对应多个视图对象。对应该窗口的多个视图对象继承自同一个与该窗口对象对应根视图对象。例如,mac系统中的窗口对象为NSWindow对象,根视图对象为NSThemeFrame对象。
在一个实施例中,根视图对象获取模块104还可用于获取窗口对象的用户区视图对象,根据用户区视图对象获取对应的根视图对象。
用户区视图即应用程序填充的显示内容的展示载体。窗口对象中还包括作为窗口属性、菜单栏等显示内容的载体的其他视图对象。由于用户区视图对象继承自根视图对象,可通过调用用户区视图对象获取超类(父类)的函数获取根视图对象。例如,mac系统中的contentView对象即为窗口对象NSWindow的用户区试图对象。可通过调用contentView对象的superView函数获取根视图对象NSThemeFrame。
截屏图像生成模块106,用于通过根视图对象生成截屏图像。
根视图对象包含了所有继承该根视图对象的子视图对象的显示内容(也可以说具有获取所有继承该根视图对象的子视图对象的显示内容的接口),截屏图像生成模块106可用于通过根视图对象获取所有子视图对象的显示内容并生成图像数据完成截屏。完成截屏之后,可通过调用操作系统的内置函数将图像数据显示为图片,也可将图像数据保存为图片文件。
在一个实施例中,截屏图像生成模块106可用于根据根视图对象配置全局设备环境对象,通过全局设备环境对象获取图像缓存对象,通过调用图像缓存对象的截屏函数生成截屏图象。
全局设备环境对象用于处理显示内容具体的显示过程。图像缓存对象为输出显示的图像在显存中得缓存数据。可通过配置全局设备对象设置根视图对象为显示内容的来源,然后通过全局设备环境对象获取图像缓存对象,并通过调用图像缓存对象的截屏函数获取显存中的显示数据得到截屏图像。
例如,在mac系统中,截屏图像生成模块106可用于通过调用根视图对象NSThemeFrame的lockFocus函数来配置全局设备环境对象,然后通过获取NSBitmapImageRep对象,并调用该对象的InitWithFocusedViewRect函数得到截屏图像,然后再调用NSThemeFrame的unLockFocus函数释放全局设备环境对象,使全局设备环境对象可继续输出其他窗口的图像。
在本实施例中,还可获取窗口对象的窗口区域参数,并根据窗口区域参数调用截屏函数得到截屏图像。例如,在mac系统中可通过调用NSWindow的获取位置函数得到Rectangle类型的参数,该参数表示窗口在显示屏上占据的矩形区域。然后将该参数传递给InitWithFocusedViewRect函数,从而根据函数返回结果得到截屏图像。
在一个实施例中,截屏装置还包括显示内容刷新模块108,用于通过调用根视图对象的刷新函数刷新根视图对象对应的显示内容。
若不对根视图对象对应的显示内容进行刷新,则应用程序更新的显示内容则无法加载到根视图对象中去,使得根视图对象中的显示内容与实际要显示的内容不同步。因此,在获取截屏图像之前,先刷新根视图对象对应的显示内容,可使最终获取到的截屏图像为当前的显示内容。例如,在mac系统中,显示内容刷新模块108可用于通过调用根视图对象NSThemeFrame的display函数刷新根视图对象对应的显示内容。
在一个实施例中,截屏装置还包括截屏区域获取模块110,用于获取输入的截屏区域。
截屏图像生成模块106还可用于以截屏区域作为参数调用图像缓存对象的截屏函数生成截屏图象。
截屏区域可由用户通过鼠标在显示屏上划定。在mac系统中,截屏图像生成模块106还可用于将输入的截屏区域封装成Rectangle类型的参数,并传递给InitWithFocusedViewRect函数,从而得到划定的截屏区域内的图像而不是整个窗口的图像。
在一个实施例中,截屏装置还包括一键截屏指令获取模块112,用于获取一键截屏指令。窗口对象获取模块102还用于根据一键截屏指令获取多个窗口对象。
也就是说,在获取一键截屏指令后,可获取当前所有已创建的窗口(包括可视窗口和隐藏窗口)对象,然后遍历获取到的窗口对象,然后对遍历到的窗口对象执行获取根视图对象并根据获取到的根视图对象生成截屏图像的步骤。使得用户可通过简单的操作即可获取当前所有的窗口的截屏图像,从而减少了用户操作的次数,提高了操作效率。
上述截屏方法及装置,可通过窗口对象对应的根视图对象生成截屏对象,而不用预先将窗口对象的可见状态设置为“可视”后再对窗口进行截屏,使得用户在截屏时可直接对隐藏窗口进行截屏,从而减少了操作次数,提高了操作效率。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random AccessMemory,RAM)等。
以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。
Claims (10)
1.一种截屏方法,包括:
获取窗口对象;
获取所述窗口对象的用户区视图对象;
根据所述用户区视图对象获取对应的根视图对象;
通过所述根视图对象生成截屏图像。
2.根据权利要求1所述的截屏方法,其特征在于,所述通过所述根视图对象生成截屏图像的步骤之前还包括:
通过调用根视图对象的刷新函数刷新根视图对象对应的显示内容。
3.根据权利要求1所述的截屏方法,其特征在于,所述通过所述根视图对象生成截屏图像的步骤为:
根据所述根视图对象配置全局设备环境对象;
通过所述全局设备环境对象获取图像缓存对象;
通过调用所述图像缓存对象的截屏函数生成截屏图像。
4.根据权利要求3所述的截屏方法,其特征在于,所述通过调用所述图像缓存对象的截屏函数生成截屏图像的步骤之前还包括:
获取输入的截屏区域;
所述通过调用所述图像缓存对象的截屏函数生成截屏图像的步骤为:
以所述截屏区域作为参数调用所述图像缓存对象的截屏函数,生成截屏图像。
5.根据权利要求1至4任一项所述的截屏方法,其特征在于,所述获取窗口对象的步骤之前还包括:
获取一键截屏指令;
所述获取窗口对象的步骤为:
根据所述一键截屏指令获取多个窗口对象。
6.一种截屏装置,其特征在于,包括:
窗口对象获取模块,用于获取窗口对象;
根视图对象获取模块,用于获取所述窗口对象的用户区视图对象;根据所述用户区视图对象获取对应的根视图对象;
截屏图像生成模块,用于通过所述根视图对象生成截屏图像。
7.根据权利要求6所述的截屏装置,其特征在于,所述装置还包括显示内容刷新模块,用于通过调用根视图对象的刷新函数刷新根视图对象对应的显示内容。
8.根据权利要求6所述的截屏装置,其特征在于,所述截屏图像生成模块还用于根据所述根视图对象配置全局设备环境对象,通过所述全局设备环境对象获取图像缓存对象,通过调用所述图像缓存对象的截屏函数生成截屏图像。
9.根据权利要求8所述的截屏装置,其特征在于,所述装置还包括截屏区域获取模块,用于获取输入的截屏区域;
截屏图像生成模块,用于以所述截屏区域作为参数调用所述图像缓存对象的截屏函数生成截屏图像。
10.根据权利要求6至9任一项所述的截屏装置,其特征在于,所述装置还包括一键截屏指令获取模块,用于获取一键截屏指令;
所述窗口对象获取模块还用于根据所述一键截屏指令获取多个窗口对象。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210392507.7A CN103729174B (zh) | 2012-10-16 | 2012-10-16 | 截屏方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210392507.7A CN103729174B (zh) | 2012-10-16 | 2012-10-16 | 截屏方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103729174A CN103729174A (zh) | 2014-04-16 |
CN103729174B true CN103729174B (zh) | 2017-10-27 |
Family
ID=50453260
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210392507.7A Active CN103729174B (zh) | 2012-10-16 | 2012-10-16 | 截屏方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103729174B (zh) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105677131A (zh) * | 2014-11-21 | 2016-06-15 | 中兴通讯股份有限公司 | 一种截图图像输出方法及装置 |
CN108540852A (zh) * | 2015-07-23 | 2018-09-14 | 海信集团有限公司 | 一种截屏方法 |
CN105867736A (zh) * | 2016-03-29 | 2016-08-17 | 努比亚技术有限公司 | 多层级界面截图装置和方法 |
CN106020644A (zh) * | 2016-05-13 | 2016-10-12 | 青岛海信移动通信技术股份有限公司 | 一种截图方法及终端 |
CN106227428A (zh) * | 2016-07-26 | 2016-12-14 | 深圳天珑无线科技有限公司 | 一种截屏方法和终端 |
CN106527892B (zh) * | 2016-11-04 | 2020-04-07 | 惠州Tcl移动通信有限公司 | 一种电子设备的截屏方法及系统 |
CN106406914A (zh) * | 2016-11-11 | 2017-02-15 | 武汉斗鱼网络科技有限公司 | 安卓系统窗口数据的获取方法及装置 |
CN112363646B (zh) * | 2020-10-23 | 2022-05-27 | 岭东核电有限公司 | 高灵活性截图方法、装置、计算机设备和存储介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101071380A (zh) * | 2007-06-27 | 2007-11-14 | 中兴通讯股份有限公司 | 一种图形用户界面的截取和重现方法 |
CN102521020A (zh) * | 2011-10-26 | 2012-06-27 | 华为终端有限公司 | 用于移动终端的应用屏幕截图方法和装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8762881B2 (en) * | 2010-07-15 | 2014-06-24 | Salesforce.Com, Inc. | Taking screenshots of a failed application |
-
2012
- 2012-10-16 CN CN201210392507.7A patent/CN103729174B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101071380A (zh) * | 2007-06-27 | 2007-11-14 | 中兴通讯股份有限公司 | 一种图形用户界面的截取和重现方法 |
CN102521020A (zh) * | 2011-10-26 | 2012-06-27 | 华为终端有限公司 | 用于移动终端的应用屏幕截图方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
CN103729174A (zh) | 2014-04-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103729174B (zh) | 截屏方法及装置 | |
US11036345B2 (en) | System and method for on-screen graphical user interface encapsulation and reproduction | |
CN104850388B (zh) | 网页绘制方法及装置 | |
CN103677777B (zh) | 调用应用程序组件的方法及装置 | |
US20150187095A1 (en) | Method and device for implementing page mask | |
TWI515646B (zh) | 擴展螢幕模式下之應用程式運作方法以及使用該方法的平板電腦 | |
JP2012522319A5 (zh) | ||
CN107292180B (zh) | 一种屏幕水印处理方法及装置 | |
CN104317474A (zh) | 窗口切换方法及装置 | |
US20130286025A1 (en) | Extensible sprite sheet generation mechanism for declarative data formats and animation sequence formats | |
CN109800041B (zh) | 小程序背景模糊实现方法、装置、电子设备及存储介质 | |
CN103970427B (zh) | 网页页面的刷新方法和装置 | |
TW201601059A (zh) | 螢幕分享方法以及使用該方法的裝置 | |
CN109445891B (zh) | 画面组态及展示方法、装置、计算机可读存储介质 | |
CN110506267B (zh) | 数字组件背景渲染 | |
CN105359207B (zh) | 弹出显示装置 | |
CN104346463A (zh) | 一种页面标签的加载方法、装置和浏览器客户端 | |
CN104866318A (zh) | 一种多窗口中标签页的展示方法及装置 | |
CN110634171A (zh) | 一种绘制地图的装置和方法 | |
CN109840042A (zh) | 在混合现实中显示虚拟对象的方法以及相关终端和系统 | |
CN106557250A (zh) | 一种在移动设备中的黑屏处理方法和装置 | |
CN104216996A (zh) | 一种文件信息展示方法及装置 | |
US20130298058A1 (en) | Creating and Maintaining a Singular Uninterrupted Focus While Transitioning Through a Graduated User Interface | |
CN108021366B (zh) | 界面动画实现方法、装置、电子设备、存储介质 | |
CN101587436B (zh) | 嵌入式设备中区域恢复的方法及系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |