实时高效获取目标窗口的可见区域

(图一)

以图一为例,假设窗口1的RECT为Rect1,窗口2的RECT为Rect2,窗口3的RECT为Rect3。那么窗口1的可见区域(Region)就是Rect1异或(XOR)Rect2后得到的区域,也就在Rect1的基础上将Rect1与Rect2重合部分给挖掉之后的结果。

下面介绍下方案实现:

(图二)

  1. 如上图二所示,首先获取目标窗口的矩形(RECT),这个RECT就是扫描目标的区域,根据这个RECT获取对应的目标Region(通过windows系统API:“CreateRectRgn”即根据RECT获得对应的Region)。
  2. 以矩形框的左上角为起点,水平方向为x轴,竖直方向为y轴,按水平方向从左到右,竖直方向从上到下的方向,扫描点阵以间距为50像素为例进行扫描;首先扫描的点阵范围必在矩形框的范围内,不会超出矩形框的范围,这就可以极大的减少我们需要扫描的目标区域范围。
  3. 首先,在扫描过程中,不断判断当前扫描点的坐标位置是否在自己的目标Region内,如果不在,跳过即可,这样可以减少扫描区域范围,将遮盖区域范围给排除掉能一定程度提升扫描的效率。
  4. 其次,在扫描过程中,判断当前扫描点的坐标对应的窗口句柄(通过windows系统API:“windowFromPoint”,即传入POINT即可得到该坐标对应的句柄值),如果所得到的窗口句柄为目标窗口的句柄,表示当前扫描点位置未被其他窗口遮盖,那么继续进行下一个扫描;如果所得到的窗口句柄不是目标窗口句柄,表示当前扫描点位置已经被其他窗口遮盖,这个时候通过该句柄值获取到对应的RECT(通过windows系统的API:“GetWindowRect”获取对应窗口的RECT),然后通过Region进行异或(XOR)组合(通过windows系统的API:“CombineRgn”来进行Region的合并操作)的方式将与目标区域的重合的部分给剔除掉即可,如此再回到步骤2再进行扫描即可。
  5. .....

    方案的改进和优化
    当然该方案还存在一些缺陷并可以做部分的改进,以下图三为例:

                                                                                 (图三)

    如果扫描的矩阵宽度为50pix,那么扫描矩阵其实就是50*50的正方形,但如果一个条形窗口高度或者宽度小于50pix,那么点阵扫描的时候可能就因为扫描点覆盖不到该条形窗口区域而将遮盖的条形窗口给忽略掉。为此我将扫描矩阵从正方形调整优化为菱形扫描矩阵,即在水平方向上的序号为偶数的点阵向y轴方向向下调整25pix,在几乎同样的扫描矩阵点数的情况下,可以最大限度的避免遗漏掉常见的水平或竖直形状的条形矩形遮盖窗口的判断:

    同时可以做非固定坐标点矩阵的实时扫描也可以最大化的减少部分较小遮盖窗的遗漏情况;同时在目标窗口的四条边界上同时做最后的矩阵扫描操作可以避免窗口边界处部分遮盖而未被扫描点覆盖到的问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/120053.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RT-Thread 8. RT-Thread Studio arm-gcc使用10.2.1编译

1. gcc编译器下载 E:\RT-ThreadStudio\repo\Extract\ToolChain_Support_Packages\ARM\GNU_Tools_for_ARM_Embedded_Processors2. 把5.4.1 改为5.4.11 再“全部构建”,提示错误 3. 把工具链版本改为10.2.1,再“全部构建”

Nacos安装指南:windows版本、linux版本

Nacos安装指南 1.Windows安装 开发阶段采用单机安装即可。 1.1.下载安装包 在Nacos的GitHub页面,提供有下载链接,可以下载编译好的Nacos服务端或者源代码: GitHub主页:https://github.com/alibaba/nacos GitHub的Release下载…

【洛谷算法题】P2433-小学数学 N 合一【入门2分支结构】

👨‍💻博客主页:花无缺 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 本文由 花无缺 原创 收录于专栏 【洛谷算法题】 文章目录 【洛谷算法题】P2433-小学数学 N 合一【入门2分支结构】🌏题目描述🌙问题…

【蓝桥杯选拔赛真题01】C++参赛建议 青少年组蓝桥杯C++选拔赛真题 STEMA比赛真题解析

目录 C/C++参赛建议 一、题目要求 1、编程实现 2、输入输出 二、算法分析 <

简述JVM

文章目录 JVM简介JVM运行时数据区堆(线程共享)方法区/元空间/元数据区(线程共享)栈程序计数器 JVM类加载类加载过程双亲委派模型 垃圾回收机制(GC)判断对象是否为垃圾判断是否被引用指向 如何清理垃圾, 释放对象? JVM简介 JVM 是 Java Virtual Machine 的简称, 意为Java虚拟机…

VSCode:清理ipch缓存

VSCode使用了一段时间&#xff0c;发现有些变慢&#xff0c;电脑管家扫描后&#xff0c;提示“AppData\Local\Microsoft\vscode-cpptools\ipch”目录下有很多缓存文件可以清理。 查询了一下&#xff1a;C/C 扩展常见问题解答 (visualstudio.com) 该件夹内包含缓存的预编译头文…

kibana监控

采取方式 Elastic Agent &#xff1a;更完善的功能 Metricbeat&#xff1a;轻量级指标收集&#xff08;采用&#xff09; 传统收集方法&#xff1a;使用内部导出器收集指标&#xff0c;已不建议 安装 metricbeat Download Metricbeat • Ship Metrics to Elasticsearch | E…

基于Jenkins实现接口自动化持续集成

一、JOB项目配置 1、添加描述 可选选项可填可不填 2、限制项目的运行节点 节点中要有运行环境所需的配置 节点配置教程 3、源码管理 需要将脚本推送到远程仓库中 4、构建触发器 可以选择定时构建和轮询SCM 定时构建&#xff1a;根据设置的定时时间&#xff0c;自动执行定…

c++系列之vector类模拟实现

&#x1f497; &#x1f497; 博客:小怡同学 &#x1f497; &#x1f497; 个人简介:编程小萌新 &#x1f497; &#x1f497; 如果博客对大家有用的话&#xff0c;请点赞关注再收藏 &#x1f31e; 构造函数 vector() //_begin表示有效成员的开始 //_finish表示有效成员的大小…

python实现批量pdf转txt和word

文章目录 背景需求环境安装完整代码效果 背景需求 已经获取到了大量的pdf在download文件夹中&#xff0c;但是我需要的是txt文件和word文件&#xff5e; 环境安装 pip install pdf2docx pdfminer.six完整代码 # pip install pdf2docx pdfminer.siximport os from pdf2docx …

idea 基础设置

1、设置 IDEA 主题 2、自动导包和优化多余的包 3、同一个包下的类&#xff0c;超过指定个数的时候&#xff0c;导包合并为* 4、显示行号 &#xff0c; 方法和方法间的分隔符&#xff1a; 5、忽略大小写&#xff0c;进行提示 6、多个类不隐藏&#xff0c;多行显示 7、设置默认的…

sys.dm_exec_requests中statement_start_offset与statement_end_offset

文章目录 1.缘起2.根因3.示例4.附录 1.缘起 mssql中查早阻塞与及其相关联的sql时&#xff0c;遇到如下内容&#xff0c;故记录一下&#xff0c; substring(dest_blocked.text,der.statement_start_offset/21,(case when der.statement_end_offset-1 then DATALENGTH(der.sta…

TensorFlow学习:使用官方模型和自己的训练数据进行图片分类

前言 教程来源&#xff1a;清华大佬重讲机器视觉&#xff01;TensorFlowOpencv&#xff1a;深度学习机器视觉图像处理实战教程&#xff0c;物体检测/缺陷检测/图像识别 注&#xff1a; 这个教程与官网教程有些区别&#xff0c;教程里的api比较旧&#xff0c;核心思想是没有变…

分享一下怎么做多门店商城系统

随着互联网的快速发展&#xff0c;传统实体店面临着巨大的挑战。为了更好地适应市场变化&#xff0c;提高竞争力&#xff0c;多门店商城系统应运而生。这种新型的商业模式&#xff0c;旨在通过线上线下融合&#xff0c;实现门店之间的互联互通&#xff0c;提高运营效率&#xf…

【会议征稿通知】2024第四届神经网络、信息与通信工程国际学术会议(NNICE 2024)

2024第四届神经网络、信息与通信工程国际学术会议&#xff08;NNICE 2024&#xff09; 2024 4th International Conference on Neural Networks, Information and Communication Engineering 2024第四神经网络、信息与通信工程国际学术会议&#xff08;NNICE 2024&#xff0…

物理世界的互动之旅:Matter.js入门指南

本文简介 戴尬猴&#xff0c;我是德育处主任 欢迎来到《物理世界的互动之旅&#xff1a;Matter.js入门指南》。 本文将带您探索 Matter.js&#xff0c;一个强大而易于使用的 JavaScript 物理引擎库。 我将介绍 Matter.js 的基本概念&#xff0c;包括引擎、世界、物体和约束等…

CSS笔记-狂神

1、什么是CSS 如何学习 CSS是什么CSS怎么用&#xff08;快速入门&#xff09;CSS选择器&#xff08;重点难点&#xff09;美化网页&#xff08;文字&#xff0c;阴影&#xff0c;超链接&#xff0c;列表&#xff0c;渐变…&#xff09;盒子模型浮动定位网页动画&#xff08;特…

【IO面试题 二】、怎么用流打开一个大文件?

文章底部有个人公众号&#xff1a;热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享&#xff1f; 踩过的坑没必要让别人在再踩&#xff0c;自己复盘也能加深记忆。利己利人、所谓双赢。 面试官&#xff1a;怎么用流打开一个大文件…

手写效果流式响应(langchain+fastapi+js)

这是一个前后端完整可用的小项目 后端是 Python 的 FastAPI 框架&#xff0c;调用 langchain 进行 openai 的模型对话。前端是纯html css javascript&#xff0c;没调用任何第三方库&#xff0c;方便集成到 Vue React 等现有前端项目。 聊天界面&#xff1a; 效果就是提问之…

vue项目中定制化音频展示,wavesurfer.js基本使用

效果图&#xff1a; wavesurfer是一个可定制的音频波形可视化&#xff0c;建立在Audio API和HTML5 Canvas之上。 基本使用&#xff1a; <body><script src"https://unpkg.com/wavesurfer.js"></script><div id"waveform"></di…