这两天受委托写个确定弹出窗口范围的小程序,总结下思路。
最开始是想直接调MFC库,但是马上被质疑了,java之类的程序很可能只是内部开启窗口,无法用MFC抓取,以及到linux环境的话……你在玩人么?!
然后同事建议抓点,反正环境相对固定,抓点出来,在程序里直接调用即可。但我觉得太麻烦了。。。窗口越多点越多,最后这写个程序,抓点时间占一半实在太傻了。
最后做出决定就是用图片比较来实现。
简单来说就是 弹出前抓个全屏图,弹出后再抓个 通过图片像素对比来实现判断。
好吧 这方法的确很弱,费时费力还可能误报,好处是不用抓点自动判定。
具体方法是
先用robot把图抓下来,转化为bufferedimage,再调用getRGB()方法变成RGB数组,通过比较RGB值来判定。
考虑到比较速度,我选择的是对角线比较。
从对角线上选点,直到找到不同点。
为了确定是真的不同点,还取了+10的另一点做参考比较。
从此点向原点扫描以判断边界点,并定位左上角锚点。
同样再找到右下锚点(加10变减10),就完成范围判断了。
这里主要的问题是
1 这个+10点如果跟背景点一致…… 好吧 我失败了。
2 还是慢
不知道有没有什么好方法可以解决。
回头抓到我那学图像处理的妹妹问问。