截取屏幕截图,对其进行分析,然后将其删除

时间:2019-05-28 23:01:25

标签: c++ windows

我一直在尝试为在线简单游戏(PHP编码的一种)编写自动答题器,但是在分析屏幕上的颜色时遇到了麻烦。 (对不起,英语不是我的母语!)我已经在大学里做过C ++的工作,但是只针对面向科学的简单控制台程序。 (编辑:我在Windows上工作!忘了提)

我已经尝试过getpixel功能,但是由于我的chrome窗口缩小了80%才能获得完整的游戏画面,因此我似乎遇到了一些与DPI相关的问题,但是看着这个使我头晕

观看Codebullet视频后,我认为一种更好的方法是对问题区域进行截图,对其进行分析以查看是否满足条件,然后删除该截图。问题是,我不知道如何实现这一目标,而Google这次并没有太大帮助:\

我的代码非常混乱,因此我现在无法显示,但基本上只是一个:

-单击此处

在5秒后单击此处

-如果像素是这种颜色,请单击那里

重复

对此有简单的答案吗?如果有的话,我将非常感谢。祝你今天愉快! :)

1 个答案:

答案 0 :(得分:2)

如果不想,则无需保存屏幕截图:

将目标窗口句柄传递给GetDC(),t将返回窗口的设备上下文。

将设备上下文传递给CreateCompatibleDC()以创建兼容的DC。

使用CreateCompatibleBitmap(),传入DC和窗口大小。这将返回位图的句柄

使用SelectObject()选择位图

使用SRCCOPY光栅操作代码,使用BitBlt()将所选像素从常规DC转换为兼容DC的位块,以进行普通复制。

创建一个BITMAP对象。使用GetObject()并将句柄传递给您创建的位图。

创建一个BITMAPINFOHEADER并定义成员变量。创建一个无符号字符数组,其大小足以容纳位图中的所有像素。

使用GetDIBits()将句柄传递给兼容位图,位图标头和指向像素数组的指针。这会将位图中的像素加载到像素数组中。

现在解析所有多汁的像素数据,搜索所需的颜色,并根据条件测试结果以确定下一步该做什么。

别忘了删除对象并释放内存和设备上下文。

我相信这是我所学的教程,该教程由MSDN提供:https://docs.microsoft.com/en-us/windows/desktop/gdi/capturing-an-image