在非即时战斗游戏中,为了对游戏人物和场景进行判断,需要对游戏界面进行对比,通过对比结果做出相应的操作。很多人好奇说为什么不用大漠插件和天使插件来进行处理,这样来的更便捷更强大,代码永远都是自己写的比较灵活,因为插件容易被反外挂程序检测到,所以自己掌握代码是最灵活的做法。以下代码是初级代码,自己优化封装可以通过内存读取RGB对比,快速实现识图,速度非常的话,比传统的GetPixel快了N倍。
1.画面读取:
byte BitMap[4];
CDC *pDC;//屏幕DC
pDC = CDC::FromHandle(GetDC(NULL));//获取当前整个屏幕DC
int BitPerPixel = pDC->GetDeviceCaps(BITSPIXEL);//获得颜色模式
int Width = pDC->GetDeviceCaps(HORZRES);//获取屏幕宽度
int Height = pDC->GetDeviceCaps(VERTRES);//获取屏幕高度
CDC memDC;//内存DC
memDC.CreateCompatibleDC(pDC);
CBitmap memBitmap, *oldmemBitmap;//建立和屏幕兼容的bitmap
//创建BitMap的X.Y
memBitmap.CreateCompatibleBitmap(pDC, Width, Height);
oldmemBitmap = memDC.SelectObject(&memBitmap);//将memBitmap选入内存DC
//设置开始截图图片的区域
//参数1.2:开始截取的X.Y
//参数2.3:最终截取的X.Y
//参数6.7:从X.Y开始截取
memDC.BitBlt