一种屏幕截屏的方法及装置与流程

文档序号:11154382阅读:584来源:国知局
一种屏幕截屏的方法及装置与制造工艺

本申请涉及通讯技术领域,尤其涉及一种屏幕截屏的方法及装置。



背景技术:

现有技术中,一些常见的具有截图功能的软件如QQ、监控软件以及直播软件等,都会对系统桌面图像进行实时的截屏。

然而,目前的截屏功能中,截取系统整个桌面的图像是一个效率非常低下的操作,平均一秒钟最大能截屏的次数只能在20帧左右。这样的截屏效率无法满足实时性要求较高的截屏需求,也会引起传输的画面卡顿不流畅。

可见,现有技术中在进行截屏操作时,存在截屏效率低的技术问题。



技术实现要素:

本申请实施例提供了一种屏幕截屏的方法及装置,用于克服现有技术中中在进行截屏操作时,所存在的截屏效率低的技术问题。

第一方面,本申请实施例提供了一种屏幕截屏的方法,所述方法应用于Windows系列操作系统,所述Windows系列操作系统包括Windows8操作系统;所述方法包括:

获得所述Windows系列操作系统的显卡接口;

根据所述显卡接口获得用于进行图像获取的图像获取接口;

根据所述图像获取接口获得当前窗口的纹理图像;

通过所述显卡接口,复制所述纹理图像;

获得所复制的所述纹理图像,并将所述纹理图像显示在桌面。

可选的,

所述图像获取接口是IDXGIOutputDuplication接口;

所述根据所述图像获取接口获得当前窗口的纹理图像还包括:

通过AcquirenextFrame方法从所述IDXGIOutputDuplication接口获得所述当前窗口的纹理图像。

可选的,所述获得所述Windows8操作系统的显卡接口包括:

根据ID3D10Device接口的QueryIneterface方法获得IDXGIDevice接口;

对所述IDXGIDevice接口进行GetAdapter方法获得所述Windows8操作系统的显卡接口;其中所述显卡接口为IDXGIAdapter接口。

可选的,所述根据所述显卡接口获得用于进行图像获取的图像获取接口包括:

根据所述IDXGIAdapter接口获得IDXGIOutput接口;

根据所述IDXGIOutput接口获得IDXGIOutput1接口;

根据所述IDXGIOutput1接口获得所述图像获取接口。

可选的,还包括:

通过EnumOutpts方法从所述IDXGIAdapter接口获得IDXGIOutput接口;

或者,

通过QueryInterface方法从所述IDXGIOutput接口获得IDXGIOutput1接口;

或者,

通过DuplicateOutput方法从所述IDXGIOutput1接口获得IDXGIOutputDuplication接口。

可选的,所述Windows系列操作系统还包括Windows8.1操作系统或Windows10操作系统。

第二方面,本申请实施例提供了一种屏幕截屏的装置,所述装置应用于Windows系列操作系统,所述Windows系列操作系统包括Windows8操作系统;所述装置包括:

显卡接口获取模块,被配置为获得所述Windows系列操作系统的显卡接口;

图像获取接口获取模块,被配置为根据所述显卡接口获得用于进行图像获取的图像获取接口;

纹理图像获取模块,被配置为根据所述图像获取接口获得当前窗口的纹理图像;

纹理图像复制模块,被配置为通过所述显卡接口,复制所述纹理图像;

纹理图像显示模块,被配置为获得所复制的所述纹理图像,并将所述纹理图像显示在桌面。

可选的,所述图像获取接口是IDXGIOutputDuplication接口;

所述纹理图像获取模块还用于:

通过AcquirenextFrame方法从所述IDXGIOutputDuplication接口获得所述当前窗口的纹理图像。

可选的,所述显卡接口获取模块包括:

第一获取子模块,被配置为根据ID3D10Device接口的QueryIneterface方法获得IDXGIDevice接口;

第二获取子模块,被配置为对所述IDXGIDevice接口进行GetAdapter方法获得所述Windows8操作系统的显卡接口;其中所述显卡接口为IDXGIAdapter接口。

可选的,所述图像获取接口获取模块包括:

第三获取子模块,根据所述IDXGIAdapter接口获得IDXGIOutput接口;

第四获取子模块,根据所述IDXGIOutput接口获得IDXGIOutput1接口;

第五获取子模块,根据所述IDXGIOutput1接口获得所述图像获取接口。

可选的,

所述第三获取子模块还用于通过EnumOutpts方法从所述IDXGIAdapter接口获得IDXGIOutput接口;

或者,

所述第四获取子模块还用于通过QueryInterface方法从所述IDXGIOutput接口获得IDXGIOutput1接口;

或者,

所述第五获取子模块还用于通过DuplicateOutput方法从所述IDXGIOutput1接口获得IDXGIOutputDuplication接口。

本申请实施例中的上述一个或多个技术方案,至少具有如下一种或多种技术效果:

本申请实施例提供的一种屏幕截屏的方法及装置,在应用于Windows系列操作系统如Windows8操作系统时,首先获得该操作系统的显卡接口,再由所获得的显卡接口获取关键的用于进行图像获取的图像获取接口;至此在获得关键的图像获取接口后即可开始进行截屏操作,通过所获得的图像获取接口获取当前窗口的纹理图像并复制所述纹理图像;最后将所复制的所述纹理图像显示在桌面,这就使得本申请实施例不需要额外的预先创建离屏表面或者内存设备环境HDC等去拷贝桌面图像,避免了由于预先创建离屏表面或者内存设备环境HDC去拷贝桌面图像而导致的影响截屏效率的耗时操作,极大的提高了截屏效率。

上述说明仅是本申请技术方案的概述,为了能够更清楚了解本申请的技术手段,而可依照说明书的内容予以实施,并且为了让本申请的上述和其它目的、特征和优点能够更明显易懂,以下特举本申请的具体实施方式。

附图说明

为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本申请实施例提供的屏幕截屏的方法流程示意图;以及

图2为本申请实施例提供的获取显卡接口的方法流程示意图;以及

图3为本申请实施例提供的获得图像获取接口的方法流程示意图;以及

图4为本申请实施例提供的屏幕截屏的装置结构框图。

具体实施方式

本申请实施例通过提供一种屏幕截屏的方法及装置,解决了现有技术中在进行截屏操作时,所存在的截屏效率低的技术问题。

本申请实施例中的技术方案,总体思路如下:

在应用于Windows系列操作系统进行截屏操作时,首先获得该Windows系列操作系统的显卡接口;然后根据所述显卡接口获得用于进行图像获取的图像获取接口;再然后根据所述图像获取接口获得当前窗口的纹理图像;再然后通过所述显卡接口,复制所述纹理图像;最后获得所复制的所述纹理图像,并将所述纹理图像显示在桌面。

上述方法通过Windows系列操作系统的显卡接口,获得关键的用于进行图像获取的图像获取接口,获得该图像获取接口后即可进入截屏操作。有效地规避了现有技术中在进行截屏操作时,由于需要预先创建离屏表面或者内存设备环境HDC去拷贝桌面图像而导致的影响截屏效率的耗时操作。正由于本申请有效地规避了该步骤,使得在获得关键的图像获取接口后即可进入截屏操作,极大的提高了截屏效率。

为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

实施例一

本实施例提供的一种屏幕截屏的方法,应用于Windows系列操作系统,所述Windows系列操作系统包括Windows8操作系统;请参阅图1,所述方法包括:

步骤S101,获得所述Windows系列操作系统的显卡接口;

步骤S102,根据所述显卡接口获得用于进行图像获取的图像获取接口;

步骤S103,根据所述图像获取接口获得当前窗口的纹理图像;

步骤S104,通过所述显卡接口,复制所述纹理图像;

步骤S105,获得所复制的所述纹理图像,并将所述纹理图像显示在桌面。

具体来讲,目前的截屏功能中,截取系统桌面的图像是一个效率非常低下的操作,平均一秒钟最大能截屏的次数只能在20帧左右。这样的截屏效率无法满足实时性要求较高的截屏需求,也会引起传输的画面卡顿不流畅。如利用D3D(Direct3D9)截屏,其是将D3D设备的前台缓冲区图像拷贝到一个离屏表面中,然后将该表面中的图像像素拷贝出来,即需要调用CreateOffscreenPlainSurface方法预先创建一个离屏表面,然后调用设备的GetFrontBufferData方法,将设备的前台缓冲区图像,也就是当前桌面的图像拷贝到上述创建的离屏表面中,再然后调用离屏表面的LockRect方法,将其像素内存拷贝到内存中,继而完成利用D3D进行截屏。再如利用GDI截屏,其是将桌面窗口的HDC(设备环境句柄)拷贝到一个内存HDC中,从而实现截取桌面图像的功能,即也是需要预先创建一个内存HDC,然后获取桌面的设备环境HDC,再调用将桌面窗口的HDC拷贝到步骤上述创建的内存HDC中,继而完成利用GDI截屏。

据发明人研究发现,上述的截屏方法,均是需要额外的预先创建离屏表面或者内存设备环境HDC等,然后通过调用系统函数将桌面图像拷贝到所创建的离屏表面或者内存设备环境HDC等,而该过程是一个非常耗时的操作过程,极大地影响了截屏的效率。而本申请正是通过Windows系列操作系统的显卡接口,获得关键的用于进行图像获取的图像获取接口,获得该图像获取接口后即可进入截屏操作。有效地规避了现有技术中在进行截屏操作时,由于需要预先创建离屏表面或者内存设备环境HDC去拷贝桌面图像而导致的影响截屏效率的耗时操作。正由于本申请有效地规避了该步骤,使得在获得关键的图像获取接口后即可进入截屏操作,极大的提高了截屏效率。

需要补充的是,本申请提供的通过Windows系列操作系统的显卡接口,获取图像获取接口,并在获得关键的图像获取接口后,进入截屏操作等均是在已经初始化好的D3D10环境下进行。

且本申请提供的屏幕截屏的方法,是应用于Windows系列操作系统,但是对所应用的Windows系列操作系统的具体版本并不局限,例如本申请不仅可以应用于Windows8操作系统,还可以应用于Windows8以上操作系统,如Windows8.1操作系统,Windows10操作系统等。在本申请实施例中,以所述方法应用于Windows8操作系统为例进行介绍。

下面,结合图1对本申请提供的屏幕截屏的方法进行详细介绍:

首先,执行步骤S101,获得所述Windows系列操作系统的显卡接口;

具体而言,以Windows8操作系统为例,则该步骤可以理解为是获取创建当前Windows8操作系统的显卡接口步骤,且该步骤是在已经初始化好的D3D10环境为前提下进行。即获取创建当前Windows8操作系统中的D3D10设备的显卡接口。

为了获得该D3D10设备的显卡接口,在具体的实施过程中,请参阅图2,可以通过如下子步骤获取:步骤101a,根据ID3D10Device接口的QueryIneterface方法获得IDXGIDevice接口;步骤101b,对所述IDXGIDevice接口进行GetAdapter方法获得所述Windows8操作系统的显卡接口,也即D3D10设备的显卡接口;其中所述显卡接口为IDXGIAdapter接口。也即,可以通过调用ID3D10Device接口的QueryInterface方法获取IDXGIDevice接口,然后调用该IDXGIDevice接口的GetAdapter方法获取创建该D3D10设备的显卡接口IDXGIAdapter。

在这里,QueryInterface方法是QueryInterface(查询接口)根据已知的接口,通过一个接口ID(GUID Global Unique Identifier全球唯一标识符)来获取另外一个接口的方法过程中。IDXGIDevice接口是基于DXGI(Microsoft DirectX Graphics Infrastructure)架构中的设备接口。

接下来,执行步骤S102,根据所述显卡接口获得用于进行图像获取的图像获取接口;

具体而言,在通过显卡接口获得图像获取接口的方法中,基于上述已经获得的IDXGIAdapter接口,请参阅图3,可以通过如下方法获取该图像获取接口:步骤102a,根据所述IDXGIAdapter接口获得IDXGIOutput接口;步骤102b,根据所述IDXGIOutput接口获得IDXGIOutput1接口;步骤102c,根据所述IDXGIOutput1接口获得所述图像获取接口。

紧接着,执行步骤S103,根据所述图像获取接口获得当前窗口的纹理图像;

需要注意的是,在本申请实施例中所述图像获取接口是IDXGIOutputDuplication接口。也即,本申请实施例中在获取当前窗口的纹理图像时,是在DXGI(Microsoft DirectX Graphics Infrastructure)框架下,调用IDXGIOutputDuplication接口的AcquireNextFrame方法来实现截屏。当然,本领域技术人员也可以理解,通过执行步骤S103所获取的当前窗口的纹理图像,可以是某一具体的应用程序的界面图像,如QQ聊天界面,网页界面,游戏界面等,也可以是整个屏幕界面,本发明并不局限。

在这里,IDXGIOutputDuplication接口可以理解为是对IDXGIOutput1接口的一个拷贝,可以用来获取显示器的图像。AcquireNextFrame方法是获取显示器的当前图像方法,通过调用该AcquireNextFrame方法,可以实现获取显示器图像的功能。

再然后,执行步骤S104,复制所述纹理图像;

和,执行步骤S105,获得所复制的所述纹理图像,并将所述纹理图像显示在桌面。

具体而言,本申请实施例中正是由于通过DXGI(Microsoft DirectX Graphics Infrastructure)的IDXGIOutputDuplication接口的AcquireNextFrame方法来实现截屏,使得通过步骤S103获取到图像获取接口后,即可进行截屏操作,也即上述的步骤S104和S105。也正因为如此,使得本申请实施例在进行截屏操作时并不需要预先创建离屏表面或者内存设备环境HDC等去拷贝桌面图像,而本领域技术人员显然可以理解,通过预先创建离屏表面或者内存设备环境HDC,然后调用函数将桌面图像拷贝到离屏表面或者内存设备环境HDC中,显然是一个非常耗时的操作过程,极大地影响了截屏效率。

实验数据表明,通过预先创建离屏表面,然后调用函数将桌面图像拷贝到离屏表面,完成利用D3D进行截屏的过程时,平均每秒20次。通过预先创建内存设备环境HDC,然后调用函数将桌面图像拷贝到内存设备环境HDC中,完成利用GDI进行截屏时,平均每秒20次。

而本申请在通过DuplicateOutput方法从所述IDXGIOutput1接口获得IDXGIOutputDuplication接口后,便可进入到截屏操作,顺次执行步骤S104、S105,有效地规避了上述利用D3D进行截屏或者利用GDI进行截屏时所存在的十分耗时的截屏操作步骤,也因此极大的提高了截屏效率。同样的,实验数据表明,本申请首先通过获取D3D10设备的显卡接口;然后根据该显卡接口获得IDXGIOutput接口;再根据该IDXGIOutput接口获得IDXGIOutput1接口;再根据该IDXGIOutput1接口获得关键的IDXGIOutputDuplication接口;最后根据所述IDXGIOutputDuplication接口进行截屏时,平均每秒60次。其截屏效率远高于现有技术,具有截屏高效的特点。

另外,在步骤S105中,对于将所述纹理图像显示在桌面上,其可以直接显示在屏幕桌面的某个区域,也可以显示在屏幕桌面跳出的一显示框,继而显示在显示框内,还可以显示在桌面上所开启的某一应用的窗口内等;对此本发明实施例并不局限。

最后,在本申请实施例中,对于IDXGIOutput接口的获得方法,可以是通过EnumOutpts方法从所述IDXGIAdapter接口获得IDXGIOutput接口;对于IDXGIOutput1接口的获得方法,可以是通过QueryInterface方法从所述IDXGIOutput接口获得IDXGIOutput1接口;以及对于IDXGIOutputDuplication接口的获得方法,可以是通过DuplicateOutput方法从所述IDXGIOutput1接口获得IDXGIOutputDuplication接口。

基于同一发明构思,本申请实施例还提供了实施例一中方法对应的装置,见实施例二。

实施例二

本实施例提供了一种屏幕截屏的装置,请参考图4,所述装置应用于Windows系列操作系统,所述Windows系列操作系统包括Windows8操作系统;所述装置包括:

显卡接口获取模块101,被配置为获得所述Windows系列操作系统的显卡接口;

图像获取接口获取模块102,被配置为根据所述显卡接口获得用于进行图像获取的图像获取接口;

纹理图像获取模块103,被配置为根据所述图像获取接口获得当前窗口的纹理图像;

纹理图像复制模块104,被配置为通过所述显卡接口,复制所述纹理图像;

纹理图像显示模块105,被配置为获得所复制的所述纹理图像,并将所述纹理图像显示在桌面。

在本申请实施例中,所述图像获取接口是IDXGIOutputDuplication接口;

所述纹理图像获取模块还用于:通过AcquirenextFrame方法从所述IDXGIOutputDuplication接口获得所述当前窗口的纹理图像。

在本申请实施例中,所述显卡接口获取模块包括:

第一获取子模块,被配置为根据ID3D10Device接口的QueryIneterface方法获得IDXGIDevice接口;

第二获取子模块,被配置为对所述IDXGIDevice接口进行GetAdapter方法获得所述Windows8操作系统的显卡接口;其中所述显卡接口为IDXGIAdapter接口。

在本申请实施例中,所述图像获取接口获取模块包括:

第三获取子模块,根据所述IDXGIAdapter接口获得IDXGIOutput接口;

第四获取子模块,根据所述IDXGIOutput接口获得IDXGIOutput1接口;

第五获取子模块,根据所述IDXGIOutput1接口获得所述图像获取接口。

在本申请实施例中,所述第三获取子模块还用于通过EnumOutpts方法从所述IDXGIAdapter接口获得IDXGIOutput接口;或者,所述第四获取子模块还用于通过QueryInterface方法从所述IDXGIOutput接口获得IDXGIOutput1接口;或者,所述第五获取子模块还用于通过DuplicateOutput方法从所述IDXGIOutput1接口获得IDXGIOutputDuplication接口。

由于本发明实施例二所介绍的装置,为实施本发明实施例一的屏幕截屏方法所采用的装置,故而基于本发明实施例一所介绍的方法,本领域所属人员能够了解该装置的具体结构及变形,故而在此不再赘述。凡是本发明实施例一的方法所采用的装置都属于本发明所欲保护的范围。

本申请实施例中提供的技术方案,至少具有如下技术效果或优点:

本申请实施例提供的一种屏幕截屏的方法及装置,在应用于Windows系列操作系统如Windows8操作系统时,首先获得该操作系统的显卡接口,再由所获得的显卡接口获取关键的用于进行图像获取的图像获取接口;至此在获得关键的图像获取接口后即可开始进行截屏操作,通过所获得的图像获取接口获取当前窗口的纹理图像并复制所述纹理图像;最后将所复制的所述纹理图像显示在桌面,这就使得本申请实施例不需要额外的预先创建离屏表面或者内存设备环境HDC等去拷贝桌面图像,避免了由于预先创建离屏表面或者内存设备环境HDC去拷贝桌面图像而导致的影响截屏效率的耗时操作,极大的提高了截屏效率。

本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。

本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。

显然,本领域的技术人员可以对本发明实施例进行各种改动和变型而不脱离本发明实施例的精神和范围。这样,倘若本发明实施例的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1