CN101216929B - 一种处理图像的方法 - Google Patents
一种处理图像的方法 Download PDFInfo
- Publication number
- CN101216929B CN101216929B CN200710032755XA CN200710032755A CN101216929B CN 101216929 B CN101216929 B CN 101216929B CN 200710032755X A CN200710032755X A CN 200710032755XA CN 200710032755 A CN200710032755 A CN 200710032755A CN 101216929 B CN101216929 B CN 101216929B
- Authority
- CN
- China
- Prior art keywords
- dll file
- screen shell
- catching
- ddi
- self
- 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.)
- Expired - Fee Related
Links
Images
Landscapes
- Processing Or Creating Images (AREA)
Abstract
本发明提供一种图像处理的方法,将系统显示驱动DLL文件以及该文件中定义的图形驱动程序接口DDI替换为预先构造的捕屏壳的DLL文件以及所述捕屏壳中定义的图形驱动程序接口DDI;获取系统表面的相关参数,在所述捕屏壳内根据所述系统表面的相关参数建立自定义绘图表面;通过系统调用所述捕屏壳的DDI在所述自定义绘图表面上进行图像绘制。本发明能够保证计算机显卡的正常运行和DirectX加速正常运行,避免了与DirectX加速冲突;同时,由于本发明是在显示驱动硬件层实现捕屏,也因此提高了捕获连续图像的处理效率。
Description
技术领域
本发明涉及对图像数据处理的方法。
背景技术
随着计算机技术应用和发展,用户经常希望将计算机屏幕上的图像进行捕获,尤其是对图像进行连续捕获并对其进行处理。为了适应用户的需求,相应的图像捕获技术应运而生。目前常用的连续捕获图像的技术有微软公司开发的Mirror Driver技术,定时器技术和消息钩子技术。但是使用MirrorDriver技术时容易产生与显卡DirectX加速冲突问题,而定时器技术和消息钩子技术需要在应用层进行数据交换,因此对计算机CPU资源消耗较大,可能会严重影响本机的正常操作。
发明内容
本发明提供一种图像处理的方法,能够提高捕获连续图像的处理效率,同时避免与显卡DirectX加速冲突。
本发明提供的处理图像的方法,包括步骤:
将系统显示驱动DLL文件以及该文件中定义的系统图形驱动程序接口(DDI)替换为预先构造的捕屏壳的DLL文件以及捕屏壳中定义的图形驱动程序接口(DDI);
获取系统表面的相关参数,在所述捕屏壳内根据所述系统表面的相关参数建立自定义绘图表面,所述自定义绘图表面是GDI通过调用图形引擎GDI服务函数来创建的;
通过系统调用所述捕屏壳的DDI在所述自定义绘图表面上进行图像绘制;
还包括步骤:
将所述系统的DDI保存于所述捕屏壳中;
调用所保存的系统的DDI建立视频绘图表面;
系统调用所述捕屏壳的DDI在所述自定义绘图表面上进行图像绘制之前,调用保存于所述捕屏壳中的系统的DDI在所述视频绘图表面上进行图像绘制。
由于本发明采用捕屏壳捕获图像,由于捕屏壳在不改变系统显示驱动所有功能的情况下,增加了制作自定义绘图表面等系统显示驱动本身没有的功能,因此能够保证计算机显卡的正常运行和DirectX加速正常运行,避免了与DirectX加速冲突;同时,由于本发明是在显示驱动硬件层实现捕屏,也因此提高了捕获连续图像的处理效率。
附图说明
图1为本发明中处理图像的方法的流程图;
图2为本发明中替换系统的DLL文件的流程图;
图3为本发明中建立视频绘图表面及自定义绘图表面的流程图。
具体实施方式
本发明提供的处理图像的方法可以通过应用层接口来开启或关闭指定显卡或指定表面的图像捕获功能,也可以通过该接口来设定所捕获的图像的区域范围,同时本发明不仅适用于支持单显卡单输出或多输出情况,同样适用于多显卡/多的情况。本发明首先构造捕屏壳(S101),然后通过捕屏壳实现图像处理过程:首先需要将系统显示驱动DLL文件以及该文件中定义的系统图形驱动程序接口(DDI)替换为预先构造的捕屏壳的DLL文件(S102)以及捕屏壳中定义的图形驱动程序接口(DDI)(S104);获取系统表面的相关参数(S105),根据系统表面的相关参数建立自定义绘图表面(S106),当捕屏壳触发处理图像的有关事件时,通过调用捕屏壳的DDI在自定义绘图表面上进行图像绘制(S107)。另外,为了在自定义绘图表面上绘制图像时不影响视频正常显示,可以在步骤S104中将系统的图形驱动程序接口(DDI)在捕屏壳中进行保存,作为一个优选实例,可以保存于捕屏壳的全局变量中,在S106创建自定义绘图表面时根据所保存的系统的图形驱动程序接口(DDI)创建视频绘图表面(S109),当S107步骤在自定义绘图表面上进行图像绘制时,先调用所保存的系统的DDI在视频绘图表面上进行图像绘制。为了将捕屏壳的自定义绘图表面上绘制的图像导出需要在捕屏壳中定义信息查询DDI,上层应用程序通过Windows提供的API“ExtEscape”或“Escape”来从所述捕屏壳中提取所述自定义绘图表面的绘图结果(即所述自定义绘图表面的显存),然后上层应用程序可以将所述绘图结果进行保存或传输给远端的客户程序显示等。(S108)。
由于捕获壳在不改变系统显示驱动所有功能的情况下,增加例如绘制自定义绘图表面等一些系统显示驱动本身没有的功能,因此本发明能保证计算机DirectX正常运行,支持多路输出的显卡,解决微软件公开高效抓图的MirrorDriver技术与DirectX加速冲突问题,由于捕获壳在不改变系统显示驱动所有功能的情况下,增加系统显示驱动本身没有的功能,所以能保证DirectX正常运行,由于本发明是在显示驱动硬件层实现捕屏,所保证CPU资源占率低,适用于计算机捕屏工程和系统集成,具有很好的市场价值与推广应用价值。
以下阐述各过程的工作原理及实现方式。
本发明S101中构造捕屏壳的过程可以是采用显示驱动技术编写类似显示驱动程序的DLL文件,利用驱动钩子技术来实现图像捕获功能。驱动钩子技术是通过修改驱动程序的接口函数在内存中的物理地址为自定义接口物理地址来修改驱动程序的接口函数功能,进而实现驱动程序本身以外的功能的技术。由于显示驱动程序支持图形引擎,而本发明的捕屏壳中的DLL文件具有与系统的DLL同样的功能,因此该捕屏壳也具备支持图形引擎(也称绘制引擎)GDI。GDI输出有多个服务例程,其名字的形式是EngXxx。系统中的显示驱动程序可以动态地连接到win32k.sys来直接访问这些例程。GDI服务例程包括表面管理、绘图模拟以及路径、调色板、字体和文本服务等;在构建捕屏壳时通常需要建立多个图形驱动程序接口(DDI),以实现对GDI的各例程的访问。例如,驱动导出接口DrvEnableDriver、创建表面接口、绘制表面删除接口、物理设备删除接口、驱动程序卸载接口、绘图接口、响应Windows API函数ExtEscape或Escape的查询信息接口等。对于各接口的功能下文中将结合具体的图像处理过程进行阐述。
由于本发明通过捕屏壳调用图形引擎GDI服务函数实现图像处理功能,为此,需要将系统的驱动程序文件替换为相对应的驱动壳文件,步骤S102中系统的DLL文件的替换可以通过多种方式实现,例如:一种方法是通过修改注册表中存放显示驱动DLL文件(不含扩展名)键的键值来实现替换,第二种方法是先将系统的显示驱动DLL文件备份并更名,然后在安全模式、VAG模式或其它方法用捕屏壳的DLL文件覆盖原来的显示驱动。
对于上述通过修改注册表来实现系统驱动程序DLL文件替换的过程可以是:
S1021、从注册表中读取显示驱动DLL文件名称,并通过修改捕屏壳PE文件,把系统显示驱动DLL文件名称永久写入到捕屏壳PE文件中,对于多显卡的情况,还需要更换捕屏壳DLL文件名称为显示驱动DLL文件名称加上其它字符或者独一无二的DLL文件名称,以标识不同的显卡;
S1022、修改注册表把原来的显示驱动DLL文件名称替换成捕屏壳DLL文件名称(不含扩展名);
S1023、重启系统,以便启用捕屏壳,操作系统就把捕屏壳当作显卡的显示驱动,捕屏壳就开始启用了。
S104步骤中捕屏壳驱动导出接口需要返回支持DDI函数的指针列表,以提供给图形引擎GDI,在这里我们可以实现显卡的DDI的替换,具体过程包括:调用GDI加载DLL的服务例程来装载系统的显示驱动DLL文件(S103),并将需要替换的系统显示驱动DDI函数指针分别保存到捕屏壳中,一个优选实例中可以保存于全局变量中,然后用捕屏壳中自定义DDI接口替换相对应的系统显示驱动DDI函数指针,并将已替换后的DDI函数指针和未替换的函数指针列表返回给GDI。
步骤S105获取系统表面的相关参数的方法可以在硬件初始化的过程实现,GDI通过调用捕屏壳的硬件初始化接口来进行初始化,实现步骤可以是:
调用S104步骤中存在全局变量中的系统显示驱动的硬件初始化接口DDI来初始化硬件,把这个接口还回值PEDV和颜色数、表面的宽度、高度等相关参数保存到一个全局变量用于保存与自定义的物理设备参数的列表中。
把S105步骤中的PDEV值返回的给GDI,GDI获得系统视频的物理设备句柄,以使视频设备及捕屏壳才正常工作。
步骤S106中建立自定义绘图表面时,GDI通过调用创建表面接口来创建视频绘图表面和图形引擎GDI服务函数来创建自定义绘图表面。如用户的显卡支持多路输出(即多表面或多显卡),GDI会调用该接口多次来创建多个绘图表面。
S106的实现步骤可以通过调用S104步骤中保存在全局变量中的系统显示驱动的创建表面DDI函数指针来创建视频绘图表面。
为实现S106创建自定义绘图桌面的过程,需要在S106绘制视频绘图桌面时返回一个视频绘图表面相关的DHSURF类型设备句柄(S1061);
然后用创建表面接口的参数即物理设备句柄作为关键字ID,从上文S105中的物理设备参数列表中查找与这个ID相同的物理设备参数(S1062);
接着,根据查到的物理设备参数即颜色数、表面的宽度、高度来分配自定义绘制表面的显存,这个显存可以包括两种方式:真实内存或虚拟内存(内存映射文件);根据颜色数、表面的宽度、高度来调用绘图引擎GDI服务程序创建一个自定义绘制表面并返回相关设备句柄,然后调用GDI服务例程EngLockSurface锁定这个表面并返回SURFOBJ类型识别自定义绘制表面的对象指针,绘图接口需要利用这个指针来完成绘图操作(S1063)。
最后,保存S1061步骤中返回的视频绘图表面相关的DHSURF类型设备句柄和S1062步骤中分配的真实内存句柄或虚拟内存句柄、内存映射文件名称、自定义绘制表面相关设备句柄、识别自定义绘制表面的对象指针到S105步骤中找到的物理设备参数列表元素中,以便在捕屏壳绘图DDI中需要利用这些参数和在捕屏壳绘制表面删除接口中要释放这些内存资源。
S107步骤中,在视频表面和自定义绘图表面进行图像绘制时,GDI通过调用绘图接口来在视频表面和自定义绘图表面模拟绘图,实现步骤:
a、调用步骤S104中保存在全局变量中的系统显示驱动的DDI绘图函数指针在视频绘图表面上绘制图像。
b、如果绘图接口参数包含有目标和源表面(由于有时绘图需要从同一个表面的指定的位置的图像拷贝到另一个位置,或者从一个表面拷贝到另一个表面,因此目标和源表面可以是相同的表面,也可以是不同的表面);那么用目标表面的物理设备句柄作为关键字,如果绘图接口参数没有目标表面只有一个源表面,那么用源表面的物理设备句柄作为关键字,从上述S105步骤中的物理设备参数列表中查找与这个ID相同的元素,如果找到,那么就调用GDI绘图服务例程在自定义绘图表面上模拟绘制图像,这样在视频表面某个坐标上绘制的图像同时也在自定义表面相同的坐标上绘制,自定义绘图表面和视频表面的图像就能实现一致和同步;如果系统表面图像发生连续变化自定义表面图像也之发生连续变化;因为不同的系统视频表面的物理设备句柄是不同的,我们通过这个关键字来区分是哪个系统视频绘图表面来实现在不同的自定义绘图表面上绘制图像,这样就能实现多表面抓图,即多表面抓图。
随着计算机技术应用和发展,多路输出计算机显卡和一机安装多显卡技术越来越成熟,应用越来越广泛;尤其高清晰大屏幕拼接墙应用普及,主从处理器技术的成熟,需要抓取从处理器桌面图像通过网络传输给主处理器,本发明还提供了将绘图结果提取的接口以便后续应用程序能够对图像进行保存或网络传输。
本发明S108步骤中从捕屏壳中提取自定义绘制表面中的图像的过程通过GDI调用捕屏壳的查询接口来实现设备查询,提取图像信息的目的,该过程可以包括:
捕屏壳的查询接口包括用于标识被查表面对象的参数,用该表面的物理设备句柄作为关键字,从S105步骤的物理设备参数列表中查找与这个ID相同的元素,如果找到这个元素,那么确定自定义绘图表面的显存是否为内存映射文件,如果是,则把内存映射文件名称返回系统,应用程序就可以读取内存映射文件的图像信息;否则要把自定义绘图表面显存中的图像信息复制到捕屏壳的查询接口的输出缓存,应用程序通过这个输出缓存来获取图像信息。
另外,对于一些不用的视频绘制表面要释放其资源并删除,GDI通过调用捕屏壳绘制表面删除接口来删除视频绘制表面和自定义绘制表面。实现步骤包括:
a、调用保存在步骤S104全局变量中的系统显示驱动的删除表面DDI函数指针来删除视频绘制表面。
b、用绘制表面删除接口的参数即物理设备句柄作为关键字ID,从步骤S105物理设备参数列表中查找与这个ID相同的物理设备参数。
c、调用GDI服务程序EngUnlockSurface释放对自定义绘制表面的锁定,调用GDI删除表面服务程序删除自定义绘制表面,释放自定义绘制表面的其它资源。
此外,当视频物理设备不再使用的情况下,GDI通过调用捕屏壳的删除视频物理设备接口来删除物理设备,实现步骤包括:
调用步骤S104保存在全局变量中的系统显示驱动的删除视频物理设备的DDI函数指针来释放视频资源,用物理设备删除接口的参数即物理设备句柄作为关键字ID,从S105步骤中的物理设备参数列表中查找与这个ID相同的物理设备参数,把这个元素从这个列表中清除。
当需要卸载捕屏壳的驱动程序时,GDI通过调用捕屏壳的驱动程序卸载接口来卸载驱动程序,调用步骤S104保存在全局变量中的系统显示驱动的驱动程序卸载DDI函数指针来卸载驱动程序,并调用GDI卸载DLL的服务程序卸载所加载的DLL文件。
以上所述的本发明实施方式,并不构成对本发明保护范围的限定。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明的权利要求保护范围之内。
Claims (9)
1.一种处理图像的方法,其特征在于,包括步骤:
将系统显示驱动DLL文件以及该文件中定义的图形驱动程序接口DDI替换为预先构造的捕屏壳的DLL文件以及所述捕屏壳中定义的图形驱动程序接口DDI;
获取系统表面的相关参数,在所述捕屏壳内根据所述系统表面的相关参数建立自定义绘图表面,所述自定义绘图表面是GDI通过调用图形引擎GDI服务函数来创建的;
通过系统调用所述捕屏壳的DDI在所述自定义绘图表面上进行图像绘制;
还包括步骤:
将所述系统的DDI保存于所述捕屏壳中;
调用所保存的系统的DDI建立视频绘图表面;
系统调用所述捕屏壳的DDI在所述自定义绘图表面上进行图像绘制之前,调用保存于所述捕屏壳中的系统的DDI在所述视频绘图表面上进行图像绘制。
2.根据权利要求1所述的处理图像的方法,其特征在于,所述系统的DDI保存于所述捕屏壳的全局变量中。
3.根据权利要求2所述的处理图像的方法,其特征在于,将所述系统的DLL文件进行替换的过程包括:
将系统注册表中系统的DLL文件名修改为所述捕屏壳中的DLL文件名,所述系统的DLL文件名和所述捕屏壳中的DLL文件名不含扩展名;
将所述捕屏壳中的DLL文件复制到所述系统的DLL文件所在目录。
4.根据权利要求2所述的处理图像的方法,其特征在于,将所述系统的DLL文件进行替换的过程包括:
将所述系统的DLL文件备份并更名,在安全模式下将所述捕屏壳的DLL文件命名为所述系统的DLL文件并覆盖所述系统的DLL文件。
5.根据权利要求1所述的处理图像的方法,其特征在于:当系统包括多个显卡时,将所述捕屏壳的DLL文件分别复制到每个显卡所对应的系统DLL文件所在的目录,并将各目录下的所述捕屏壳的DLL文件以不同的标识命名。
6.根据权利要求5所述的处理图像的方法,其特征在于:当系统存在多输出显卡时,所述建立自定义绘图表面的具体过程包括:
获取各显卡对应的系统表面的相关参数,在所述捕屏壳中建立各显卡对应的自定义绘图表面。
7.根据权利要求1所述的处理图像的方法,其特征在于:建立所述自定义绘图表面的过程包括步骤:根据所述系统表面的相关参数分配所述自定义绘图表面的显存;所述显存为真实分配内存或虚拟内存,所述虚拟内存为内存映射文件。
8.根据权利要求7所述的处理图像的方法,其特征在于,所述步骤还包括步骤:
通过系统提供的应用程序接口API从所述捕屏壳的显存中提取所述自定义绘图表面的绘图结果,将所述绘图结果保存或传输。
9.根据权利要求1所述的处理图像的方法,其特征在于,还包括步骤:当所述视频绘制表面使用完成时,通过调用所述捕屏壳和系统的DDI删除视频绘制表面和自定义绘制表面。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN200710032755XA CN101216929B (zh) | 2007-12-26 | 2007-12-26 | 一种处理图像的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN200710032755XA CN101216929B (zh) | 2007-12-26 | 2007-12-26 | 一种处理图像的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101216929A CN101216929A (zh) | 2008-07-09 |
CN101216929B true CN101216929B (zh) | 2010-09-15 |
Family
ID=39623358
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN200710032755XA Expired - Fee Related CN101216929B (zh) | 2007-12-26 | 2007-12-26 | 一种处理图像的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101216929B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106709965A (zh) * | 2016-12-12 | 2017-05-24 | 广东威创视讯科技股份有限公司 | 一种基于共享表面的文本显示方法及装置 |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102073973B (zh) * | 2009-11-25 | 2015-06-17 | 新奥特(北京)视频技术有限公司 | 一种获取、编辑自定义图形的方法和字幕图形制作系统 |
US9940107B2 (en) * | 2013-03-15 | 2018-04-10 | International Business Machines Corporation | Object and connection organization in a diagram |
CN106789402B (zh) * | 2016-11-30 | 2020-04-03 | 太仓市同维电子有限公司 | 一种基于自动化平台的多网口映射多机测试系统和方法 |
CN107329723A (zh) * | 2017-07-13 | 2017-11-07 | 山东超越数控电子有限公司 | 一种实现DirectDraw加速的方法 |
CN109240707A (zh) * | 2018-09-29 | 2019-01-18 | 珠海市君天电子科技有限公司 | 防止恶意动态链接库dll文件注入的方法和装置 |
CN109726027B (zh) * | 2018-12-30 | 2021-05-18 | 联想(北京)有限公司 | 消息查看方法、装置及电子设备 |
CN110647365A (zh) * | 2019-09-29 | 2020-01-03 | 联想(北京)有限公司 | 一种控制方法、装置及电子设备 |
CN113032041A (zh) * | 2021-03-16 | 2021-06-25 | 广州虎牙科技有限公司 | 一种编码方法、装置、电子设备以及计算机可读存储介质 |
-
2007
- 2007-12-26 CN CN200710032755XA patent/CN101216929B/zh not_active Expired - Fee Related
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106709965A (zh) * | 2016-12-12 | 2017-05-24 | 广东威创视讯科技股份有限公司 | 一种基于共享表面的文本显示方法及装置 |
CN106709965B (zh) * | 2016-12-12 | 2020-08-11 | 广东威创视讯科技股份有限公司 | 一种基于共享表面的文本显示方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN101216929A (zh) | 2008-07-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101216929B (zh) | 一种处理图像的方法 | |
RU2392655C2 (ru) | Нанесение чернил в реальном времени | |
US5734852A (en) | Method and apparatus for displaying hardware dependent graphics in an object-oriented operating system | |
US5864668A (en) | System for connecting a client to a server with a protocol stack dynamically constructed by using top and bottom service descriptions as query parameters | |
US5668997A (en) | Object-oriented system for servicing windows | |
US9003312B1 (en) | Method and apparatus for updating a web-based user interface | |
CN102789382B (zh) | 用于表单生成和运行的系统及方法 | |
CN107977176A (zh) | 打印方法、装置及设备 | |
CN103927198A (zh) | 一种软件清理方法及装置 | |
CN107908472A (zh) | 数据同步装置、方法及计算机可读存储介质 | |
CN110275722A (zh) | 用于升级应用的方法、装置、设备和存储介质 | |
CN103106058A (zh) | 一种基于Android系统的双屏显示方法及智能显示终端 | |
CN100465882C (zh) | 为全球应用创建文化敏感控件的方法和系统 | |
CN105426259B (zh) | 用于传递api中的依赖关系的方法和介质 | |
CN110516179A (zh) | 图形渲染方法、装置、电子设备及存储介质 | |
CN107111581A (zh) | 存储器描述符列表高速缓存和管道处理 | |
CA2564389A1 (en) | Multi-source, multi-destination data transfers | |
JP2006048645A (ja) | ドキュメントにコンテキスト情報を埋め込むための方法およびシステム | |
CN103309695A (zh) | 一种加载图标的方法和终端 | |
US7567253B2 (en) | Mirror driver notification of device independent bitmap drawing calls | |
US9324299B2 (en) | Atlasing and virtual surfaces | |
CN108984244A (zh) | 浏览器页面渲染方法、电子装置及计算机可读存储介质 | |
US20130073824A1 (en) | Copying segments of a virtual resource definition | |
CN102779076B (zh) | 一种浏览器中进程间通信的方法和装置 | |
US20020001000A1 (en) | Apparatus for and method of acquiring processing and routing data contained in a GUI window |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20100915 Termination date: 20161226 |
|
CF01 | Termination of patent right due to non-payment of annual fee |