- 按键认证导师
- 513852
- 3624
- 47
- 4633 朵
- 28052 个
- 6157 个
- 190000
- 2010-10-09
|
1#
t
T
发表于 2022-02-08 11:02
|
|只看楼主
按键精灵的图色命令功能非常强大, 有找图/找色/找字/比色等等各个不同功能的命令, 但是当大家遇到使用相关图色命令却返回找不到或得到坐标不正确, 对比不成功等情况的时候, 往往会一头雾水, 想不通如何解决这个问题.
出现这种问题的本质原因在于画面上的图色数据, 跟你自己写的图色数据不一致, 导致按键精灵给你返回结果是失败, 对比不成功. 然而这样的返回信息太过于单调, 就简单的告诉你找不到或一个其他坐标, 并没有告诉你到底哪里不一致.
所以我们要从这里入手, 当按键精灵图色找不到的时候, 我们让按键精灵把它查找的这部分图色画面展示给我们看, 然后我们自己用眼睛去对比下这部分的图色数据跟我们写的图色数据到底哪里不一样, 具体方法如下.
找不到图片/找不到文字/找不到颜色等查找返回坐标的命令
- 按键电脑版使用Plugin.Pic.PrintScreen()截图命令还原按键精灵查找时候的现场画面, 建议只截取查找范围部分的画面.
- 按键手机版使用SnapShot()截图命令还原按键精灵查找时候的现场画面, 建议只截取查找范围部分的画面.
- 如果你是用按键电脑版自带的找图命令查找附件图片的, 请见2014.05版附件找图BUG情况
- 如果是用按键电脑版大漠插件查找的, 可以在先开启图色调试模式dm.EnableDisplayDebug 1, 然后用dm.CapturePre()截取查看现场画面.
- 使用抓抓加载图片打开
- 根据找图找色代码命令设置的范围去选取抓抓上截图的范围.
- 对比两者图色数据是否一致, 分析为什么找不到图色或找到坐标不正确.
- 如果是找图命令看不出图片区别的话, 直接追加一张查找图片数据.
代码例子如下: - //按键电脑版找图命令
- FindPic 0,0,1024,768,"Attachment:\神盾.bmp",0.9,intX,intY
- If intX > -1 Then
- TracePrint "找到坐标是" & intX & "," & intY
- //如果坐标不正确, 也用截图命令来分析
- Else
- TracePrint "没找到"
- Call Plugin.Pic.PrintScreen(0, 0, 1024, 768, "C:\找图现场.bmp")
- //用抓抓加载图片对比分析
- End If
复制代码- //大漠找图命令
- //省略大漠注册创建对象等代码
- //必须开启图色调试才能使用CapturePre()
- dm.EnableDisplayDebug 1 //必须要写在所有图色命令之前
- dm_ret = dm.FindPic(0,0,2000,2000,"1.bmp|2.bmp|3.bmp","000000",0.9,0,intX,intY)
- If intX >= 0 and intY >= 0 Then
- MessageBox "找到" & intX & "," & intY
- Else
- TracePrint "没找到"
- dm_ret = dm.CapturePre("screen.bmp")
- //用抓抓加载图片对比分析
- End If
复制代码- //按键手机版多点找色命令
- Dim intx, inty, 颜色值, 偏移的颜色串
- FindMultiColor 100, 200, 300, 400, 颜色值, 偏移的颜色串, 0, 0.9, intX, intY
- If intX > -1 And intY > -1 Then
- TracePrint "找到坐标是:", intx, inty
- //假如是坐标不正确的话, 也进行同样的截图分析
- Else
- TracePrint "找不到图色进行截图分析"
- SnapShot "/sdcard/找不到图色.png", 100, 200, 300, 400
- //把截取的图片传到电脑上, 按步骤对比分析
- End If
复制代码
比色不一致等对比固定坐标命令
- 用GetPixelColor()之类的获取颜色命令来输出查看指定坐标点的颜色是什么颜色.
- 分析获取到的颜色跟我们代码写的颜色有什么区别, 思考为什么会有不一样的.
- 如果找不到不一致的原因, 那么按键电脑版使用Plugin.Pic.PrintScreen()截图命令截取画面.
- 如果找不到不一致的原因, 那么按键手机版使用snapshot()截图命令截取画面.
- 用抓抓加载图片打开
- 找到我们写的坐标点, 对比这个点的颜色跟我们写的颜色不一样的地方, 并分析原因.
- 一般是颜色比色太早或者太晚导致的, 加点延时就可以解决, 如果是色差问题, 多加几个颜色数据即可解决
代码例子如下: - //按键电脑版
- Dim c
- IfColor x,y,"FFFFFF",0 Then
- //颜色一样
- Else
- //颜色不一样
- TracePrint GetPixelColor(x, y)
- End If
复制代码- //按键手机版
- Dim c
- If CmpColorEx("300|500|FFFFFF|123456,305|505|FFFFFF",0.9) = 1 Then
- TracePrint "全部点颜色相等"
- Else
- TracePrint "有一个或多个颜色不符合"
- c = GetPixelColor(300, 500)
- TracePrint "300, 500的颜色是", c
- c = GetPixelColor(305, 505)
- TracePrint "305, 505的颜色是", c
- //请自行比较输出结果与你的数据是否一致
- //如果不一致但又不知道原因的话, 那就用snapshot()截图分析
- End If
复制代码
|