前几天上传了一个自制的QQ找碴游戏的小工具(http://www.cnblogs.com/saintbird/archive/2008/09/18/1293121.html),有部分朋友比较感兴趣,这里简单说一下原理。
整个实现过程其实很简单,主要分以下几个步骤:
1、获取QQ游戏主窗口:使用系统API函数FindW()即可实现;
2、寻找图片坐标:在这个游戏中,图片每次出现的位置并不是固定的,而是在一个很小的范围内波动, 图片左上角坐标的取值大概在正负10的范围内变化,所幸的是图片边缘的颜色值每次都是固定的,因此可以通过检测图片边缘的RGB值来获取图片精确的位置,使用GetPixel()函数可以获取图片的RGB值。
3、寻找两幅图的差异:图片位置确定以后,下面的事情就简单了,通过循环不断获取两幅图对应坐标点的RGB值,利用减法寻找差异。这里有个问题需要注意一下,有些图片肉眼看上去并无任何区别,但它们的RGB值并不是完全相等的,因此需要设定一个阙值,只有两点之间的差异值大于这个阙值才可选作异同点,然后使用SetPixel()函数将异同点以用户之前选定的颜色显示出来。
在之前上传的程序中,我主要是使用API函数实现的,后来看到另一种实现方法,原理基本类似,但使用的是第三方的类库opencv实现的,有兴趣的朋友可做参考。