开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 7400|回复: 9
收起左侧

[已回应] 建议精易模块增加【最快的DirectX 11屏幕找图】

[复制链接]
发表于 2021-6-11 08:07:50 | 显示全部楼层 |阅读模式   浙江省金华市
DirectX 11屏幕找图提速想法:
1,设定区域,不需要全屏幕截图
2,网上看到用BitBlt截图,1像素也要50毫秒,用DX11截图提速,只需要10毫秒左右
3,如果做到只截图变化区域,速度可以提高80倍(纯桌面,非游戏)
4,代码函数:pvCaptureScreen,
DX图像内存地址是?D3D11_MAPPED_SUBRESOURCEt.pDataPtr
可以先找第一行图片,匹配才转入整个小图匹配比较。

也可以用这种方式配合汇编找图或按像素找图,隔行隔列扫描法提速。
比如找100*50的小图,可以隔5行5列去查找,提高速度。实际相当于只要找20*10像素,提速25倍


屏幕变化区域找图原理:
假如屏幕是:3840*2160
要找的小图片大小是100*50
原来要找829.5万像素

第一次把全屏图片画到内存DC,
如果DX11 检测到屏幕中间 2000,1000的坐标开始,宽度=500,高度=400的一块区域发生了变化。
只需要把这部分变化的区域画到内存DC,然后再比这区域再扩大一点进行找图。
实际寻找的范围,宽度=500+100*2,高度=400+50*2,总像素=35万,比原来的829万像素少多了,速度可以提高23倍左右。

BitBlt 这个API速度比较慢,你截图1像素和1000*1000=100万像素,用的时间都差不多要50毫秒,用DX截图速度可以加快5-10倍


相关网址:
[VB6] DirectX 11 Desktop Duplication-VBForums(VB6 DirectX 11模块,TLB类型库),DX屏幕截图
https://www.vbforums.com/showthread.php?889024-VB6-DirectX-11-Desktop-Duplication


D3D11CreateDevice,
Windows 10 下的高效抓屏方法_白袍小将的博客-CSDN博客
https://blog.csdn.net/ababab12345/article/details/102674601
Duplication API获取到的桌面数据,不管显示模式如何设置,都永远是32位RGBA数据
真实可用,采用博主这个代码后,在win10由原来的GDI捕捉函数替换为DXGI捕捉屏幕1080p,由原来的30ms降低到16ms,感谢博主


(63条消息) DXGI快速截屏录屏技术,高帧率直播桌面_HBStream流媒体与音视频技术-CSDN博客
https://blog.csdn.net/haibindev/article/details/84061641

VB6 DX11里也有,AcquireNextFrame

Function AcquireNextFrame(TimeoutInMilliseconds As Long, pFrameInfo As DXGI_OUTDUPL_FRAME_INFO, ppDesktopResource As IDXGIResource) As VBHRESULT
    VBD3D11.IDXGIOutputDuplication 的成员

获取到IDXGIOutputDuplication接口,是通过如下路径:
IDXGIDevice --> IDXGIAdapter --> IDXGIOutput --> IDXGIOutput1 --> IDXGIOutputDuplication


屏幕变化区域找图原理.png
Dx截图变化区域提速.png

评分

参与人数 1好评 +1 精币 +5 收起 理由
项目部004 + 1 + 5 精彩文章希望继续努力

查看全部评分

结帖率:30% (6/20)

签到天数: 9 天

发表于 2023-4-1 14:24:03 高大上手机用户 | 显示全部楼层   江西省九江市
你提供下源码吧
回复 支持 反对

使用道具 举报

发表于 2023-2-18 20:46:18 | 显示全部楼层   上海市上海市
正要找这种
回复 支持 反对

使用道具 举报

结帖率:93% (25/27)

签到天数: 1 天

发表于 2021-7-13 07:40:54 高大上手机用户 | 显示全部楼层   山东省青岛市
请问汇编找图在哪儿找到呢
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-12 00:29:51 | 显示全部楼层   浙江省金华市
DXGI快速截屏录屏技术,高帧率直播桌面_HBStream流媒体与音视频技术-CSDN博客
https://blog.csdn.net/haibindev/article/details/84061641
很多地方都需要用到截屏/录屏技术,比如桌面直播,桌面录制等等。在微软Windows平台,有很多截屏的接口,不过大多数性能并不理想,
Windows8以后微软引入了一套新的接口,叫“Desktop Duplication API”,应用程序,可以通过这套API访问桌面数据。
而由于Desktop Duplication API是通过Microsoft DirectX Graphics Infrastructure (DXGI)来提供桌面图像的,速度非常快。由于是通过GPU,所以cpu占用率很低,性能很高。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-11 21:23:11 | 显示全部楼层   浙江省金华市
多种屏幕找图组件测速-截图100毫秒,识别3.5毫秒
1230多种屏幕找图组件测速-截图100毫秒,识别3.5毫秒.png
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-11 19:37:17 | 显示全部楼层   浙江省金华市
能找图都是垃圾,能截图才是高手

这句话经典,比如用虚拟显卡驱动,相当于屏幕HOOK,不需要截图的才是最强的。
或者用DirectX截图,只截取变化的部分,这样速度能提高5-10倍
100%匹配的,大屏幕3840*2160,用VB汇编找图只需要0.8秒,左右角。
要找的东西在右下解的也只压岁要4.3毫秒,但是截图要106毫秒,加起来110毫秒
大漠用了165毫秒。
比较起来就是大漠纯像素字节找图可能用了30-50毫秒,比VB6的4毫秒慢了不少。
截屏方面还可以提速50-100毫秒左右
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-11 19:30:45 | 显示全部楼层   浙江省金华市
几个屏幕找图组件速度对比:

(禁用DPI缩放)找的图在【左上角】--第1次
大漠版本:7.1822,加载用时:1652.7毫秒
0P库版本:0.3.5.0,加载用时:2.0毫秒
乐玩版本:8.17,加载用时:38.7毫秒
VB汇编找图加载用时:0.5毫秒

寻找屏幕区域:3840*2160
小图宽高:151,158
加载图片和DC用时:0.97毫秒
识图用时0.82毫秒
汇编找图,坐标【237,316】用时104.8714毫秒
乐玩找图,坐标【1】      用时147.98毫秒
大漠找图,坐标【237,316】用时190.05毫秒--第1次
OP库找图,坐标【237,316】用时522.77毫秒

寻找屏幕区域:3840*2160
小图宽高:151,158
加载图片和DC用时:0.97毫秒
识图用时0.81毫秒
汇编找图,坐标【237,316】用时115.9346毫秒
乐玩找图,坐标【1】      用时140.16毫秒
大漠找图,坐标【237,316】用时152.24毫秒 '第2次相同位置
OP库找图,坐标【237,316】用时145.76毫秒
======================================================
(禁用DPI缩放)找的图在【右下角】--第1次
大漠版本:7.1822,加载用时:1726.5毫秒
0P库版本:0.3.5.0,加载用时:1.6毫秒
乐玩版本:8.17,加载用时:40.2毫秒

寻找屏幕区域:3840*2160
小图宽高:151,158
加载图片和DC用时:0.90毫秒
识图用时4.33毫秒
汇编找图,坐标【3621,1735】用时108.4819毫秒
乐玩找图,坐标【1】        用时191.84毫秒
大漠找图,坐标【3621,1735】用时178.87毫秒--第1次
OP库找图,坐标【3621,1735】用时591.82毫秒
===========================
寻找屏幕区域:3840*2160
小图宽高:151,158
加载图片和DC用时:0.90毫秒
识图用时4.34毫秒
汇编找图,坐标【3662,1761】用时106.0539毫秒
乐玩找图,坐标【1】        用时167.35毫秒
大漠找图,坐标【3662,1761】用时168.53毫秒--第2次
OP库找图,坐标【3662,1761】用时206.11毫秒
===========================
寻找屏幕区域:3840*2160
小图宽高:151,158
加载图片和DC用时:0.90毫秒
识图用时4.29毫秒
汇编找图,坐标【3679,1763】用时110.1999毫秒
乐玩找图,坐标【1】        用时169.30毫秒
大漠找图,坐标【3679,1763】用时165.81毫秒--第3次
OP库找图,坐标【3679,1763】用时209.58毫秒
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-11 09:00:45 | 显示全部楼层   浙江省金华市
易语言dx前台截图源码 - 易语言资源网
https://www.eyuyan.la/plugin.php?id=ziyuan&a=post&pid=1612
求助,d3dx9_42.dll哪里下载?
回复 支持 反对

使用道具 举报

结帖率:100% (8/8)

签到天数: 15 天

发表于 2021-6-11 08:21:02 | 显示全部楼层   广东省揭阳市
要是显卡不支持dx11, 那就GG了, 你还得有段代码检测是否支持dx11才行, 不支持用旧版代码, 支持就用新版代码
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表