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

(图一)

以图一为例,假设窗口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.rhkb.cn/news/170681.html

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

相关文章

什么是React Router?它的作用是什么?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

方舟生存进化ARK个人服务器搭建教程保姆级

方舟生存进化ARK个人服务器搭建教程保姆级 大家好我是艾西,在很久之前我有给大家分享过方舟生存进化的搭建架设教程,但时间久远且以前的教程我现在回头看去在某些地方说的并不是那么清楚。最近也是闲暇无事打算重新巩固下方舟生存进化的搭建架设教程&…

软考高级之系统架构师之数据流图和流程图

数据流图 概述 数据流图,DFD,用于表示业务信息系统中的数据流,它表达系统中的据传从输入到存储间所涉及的程序。采用图形方式来表达系统的逻辑功能、数据在系统内部的逻辑流向和逻辑变换过程,是结构化系统分析方法的主要表达工具…

uni-app:解决异步请求返回值问题

可以使用 Promise 或者回调函数来处理异步请求的返回值。 方法一: Promise处理异步请求的返回值 使用 Promise 可以将异步请求的结果通过 resolve 和 reject 返回,然后通过 .then() 方法获取成功的结果,通过 .catch() 方法获取错误信息。 …

LeetCode209——长度最小的子数组

LeetCode209——长度最小的子数组 题目描述: 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的 连续子数组 [numsl, numsl1, …, numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数…

抓取网页的含义和URL基本构成

抓取网页是指通过爬虫程序从互联网上获取网页的内容和数据。抓取网页是爬虫的核心功能之一,通过抓取网页,可以获取到网页中的文本、图片、链接等信息,用于后续的数据分析、挖掘和应用。 URL(Uniform Resource Locator&#xff09…

Istio 自动注入 sidecar 失败导致无法访问webhook服务

最近工作中在部署Istio环境的过程中发现官方示例启动的pod不能访问不到Istio的webhook,这个问题也是困扰了我一天,特此记录,便于日后查阅。 我把他归类到sidecar注入失败的情况,报错如下: 1、第一种可能(我…

计算机基础知识38

创建表的完整语法 create table t1(id int,name varchar(43),age int); create table 库名.表名( 字段名1 数据类型 约束条件 约束条件 约束条件 约束条件, 字段名2 数据类型 约束条件 约束条件 约束条件 约束条件...); 1. 字段名和数据类型必须…

c++类和对象(1)

目录 目录: 1.类的定义 1.1:类的语法及相关概念 1.2:类的两种定义方式 1.3:类的成员变量名命名规范 2.类的访问限定符 2.1:三种访问限定符关键字引入 2.2:访问限定符的语法说明 2.3:c中struct与class的区别(面试常考) 3.类的作用域 4.类的实例化 5.类对象 5.1:类对…

adb: error: 46-byte write failed: Invalid argument

使用adb pull可以,但是adb push fail。 貌似是adb的问题,将adb.exe 重命名为pdb,使用pdb push就行了。

二、【常用的几种抠图方式一】

文章目录 选框抠图快速选择工具抠图魔棒工具抠图对象选择工具抠图套索工具抠图多边形套索工具抠图磁性套索工具抠图 选框抠图 选框工具抠图适合规则的图形,如下图先使用选框工具框出对象的图轮廓,然后再选择并遮住在里边擦出图形的边缘,根据…

软考高级系统架构 上午真题错题总结

目录 前言一、2022年真题(√)二、2021年真题(√)三、2020年真题(√)四、2019年真题(√)五、2018年真题(√)六、2017年真题(√)七、201…

百度Comate SaaS版本正式发布,助力开发者加速研发过程

百度Comate是基于文心大模型的智能代码助手,让开发者的编码更快、更好、更简单,为开发者自动生成完整的、且更符合实际研发场景的代码行或整个代码块,帮助每一位开发者轻松完成研发任务。10月17日召开的百度世界大会上,百度CTO王海…

酷开科技依托酷开系统推动家庭智能化加速发展

为什么越来越多的人会选择智能家居?因为智能家居的出现,大大方便了我们的生活,为生活提供便利舒适的体验;就如同洗衣机与洗碗机解放了我们的双手是一样的道理,智能家居是在生活的方方面面为我们提供更加便利化的可能性…

p5.js 状态管理

本文简介 带尬猴,我是德育处主任 原生 canvas 提供了 save() 和 restore() 两个方法去管理画布状态。p5.js 作为一个 canvas 库,也理所当然的提供了状态管理的方法。在 p5.js 里这两个方法叫 push() 和 pop()。 本文主要讲解 p5.js 的 push() 和 pop()…

基于java的ssm框架农夫果园管理系统设计与实现

项目描述 临近学期结束,还是毕业设计,你还在做java程序网络编程,期末作业,老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下,你想解决的问…

python爬虫入门(四)爬取猫眼电影排行(使用requests库和正则表达式)

本例中,利用 requests 库和正则表达式来抓取猫眼电影 TOP100 的相关内容。 1.目标 提取出猫眼电影 TOP100 的电影名称、时间、评分、图片等信息,提取的站点 URL 为 http://maoyan.com/board/4,提取的结果会以文件形式保存下来。 2.抓取分析…

vscode推送gitee方法

有一套uni-app代码需要修改,版本控制使用vscode的git功能,远程库在gitee上。 1、设置vscode中git.exe路径 由于git使用了绿色便携版(PortableGit-2.42.0.2-64-bit.7z.exe),vscode未识别到git安装路径,需要…

OKLink携手CertiK在港举办Web3生态安全主题论坛

2023年10月23日,OKLink与CertiK共同发起的Web3生态安全主题论坛在香港铜锣湾拉开帷幕。本次论坛由OKLink和CertiK主办,香港投资推广署独家支持,聚焦如何构建安全可靠的Web3生态系统议题,同时深入剖析这一进程中所面临的潜在挑战。…

OkHttp网络框架深入理解-SSL握手与加密

OkHttp简介 由Square公司贡献的一个处理网络请求的开源项目,是目前Android使用最广泛的网络框架。从Android4.4开始HttpURLConnection的底层实现采用的是OkHttp。 特点: 支持HTTP/2并允许对同一主机的所有请求共享一个套接字通过连接池,减少了请求延迟…