按键精灵 循环找图 保存坐标
按键精灵循环找图想将图片上的所有的黄方块通过循环找图命令,将所有黄方块按从上往下从左往右的坐标保存成TXT文件如果有80个黄方块,就保存成A1=X,Y.........A...
按键精灵循环找图
想将图片上的所有的黄方块通过循环找图命令,将所有黄方块按从上往下从左往右的坐标保存成TXT文件
如果有80个黄方块,就保存成A1=X,Y .........A80=X,Y
高手回答
回答好的下面这一百分全拿走,如果下面那个问题也会的,再追加100
http://zhidao.baidu.com/question/411019945.html?quesup2&oldq=1 展开
想将图片上的所有的黄方块通过循环找图命令,将所有黄方块按从上往下从左往右的坐标保存成TXT文件
如果有80个黄方块,就保存成A1=X,Y .........A80=X,Y
高手回答
回答好的下面这一百分全拿走,如果下面那个问题也会的,再追加100
http://zhidao.baidu.com/question/411019945.html?quesup2&oldq=1 展开
展开全部
你这个图的难点就是有过渡色,看起来黄色的方块其实每一个都不一样
这也是脚本导出的坐标不整齐的原因
下面这个脚本只适用于等距阵列的方块,图形所在的窗口要尽量小,不然还是比较费时间的
找蓝色的话就把"00FFFF"替换为"FF0000"
找粉色的话就把"00FFFF"替换为"FF00FF"
其他颜色你自己改
我调试觉得没什么大问题了
--鼠标左上角放在色块上启动脚本,注意这个色块的右面和下面至少还要有一个色块(颜色不限)--
Hwnd = Plugin.Window.MousePoint()
sRect = Plugin.Window.GetClientRect(Hwnd)
dim MyArray
MyArray = Split(sRect, "|")
W = MyArray(2) : H = MyArray(3)
xy = Lib.窗口.得到鼠标在窗口上位置()
ZB = InStr(XY, "|")
x = Clng(Left(XY, ZB - 1)) : y = Clng(Right(XY, Len(XY) - ZB))
i = 0 : k = 0
Do
C = Plugin.Bkgnd.GetPixelColor(Hwnd, x + i, y)
Call Plugin.Color.ColorToRGB(C, R, G, B)
If R<32 and G<32 and B<32 Then
C = 0
Else
C = 1
End If
If C = 0 and k = 0 Then
dx = x
x = x + i
k=1
End If
If C = 1 and k = 1 Then
k=2
End If
If C = 0 and k = 2 Then
TracePrint i
Exit Do
End If
i=i+1
If x+i - h > 0 Then
MessageBox "宽度出错"
EndScript
End If
Loop
j = 0 : k = 0
Do
C = Plugin.Bkgnd.GetPixelColor(Hwnd, dx, y + j)
Call Plugin.Color.ColorToRGB(C, R, G, B)
If R<32 and G<32 and B<32 Then
C = 0
Else
C = 1
End If
If C = 0 and k = 0 Then
y = y + j
k=1
End If
If C = 1 and k = 1 Then
k=2
End If
If C = 0 and k = 2 Then
TracePrint j
Exit Do
End If
j=j+1
If y+j - h > 0 Then
MessageBox "高度出错"
EndScript
End If
Loop
dx = x mod i : dy = y mod j
m = 0 : n = 0 : k = 0
Do
x = dx + m * i
m=m+1
If x -w > 0 Then
Exit Do
End If
Do
y = dy + n * j
n = n + 1
If y-h >0 Then
n = 0
Exit Do
End If
XY = Plugin.Bkgnd.FindColor(Hwnd, x, y, x+i,y+j, "00FFFF")
If xy <> "-1|-1" Then
k = K + 1
S = "第" & k & "个坐标为" & xy
Call Plugin.File.WriteFileEx("C:\test.txt",S)
End If
Loop
Loop
这也是脚本导出的坐标不整齐的原因
下面这个脚本只适用于等距阵列的方块,图形所在的窗口要尽量小,不然还是比较费时间的
找蓝色的话就把"00FFFF"替换为"FF0000"
找粉色的话就把"00FFFF"替换为"FF00FF"
其他颜色你自己改
我调试觉得没什么大问题了
--鼠标左上角放在色块上启动脚本,注意这个色块的右面和下面至少还要有一个色块(颜色不限)--
Hwnd = Plugin.Window.MousePoint()
sRect = Plugin.Window.GetClientRect(Hwnd)
dim MyArray
MyArray = Split(sRect, "|")
W = MyArray(2) : H = MyArray(3)
xy = Lib.窗口.得到鼠标在窗口上位置()
ZB = InStr(XY, "|")
x = Clng(Left(XY, ZB - 1)) : y = Clng(Right(XY, Len(XY) - ZB))
i = 0 : k = 0
Do
C = Plugin.Bkgnd.GetPixelColor(Hwnd, x + i, y)
Call Plugin.Color.ColorToRGB(C, R, G, B)
If R<32 and G<32 and B<32 Then
C = 0
Else
C = 1
End If
If C = 0 and k = 0 Then
dx = x
x = x + i
k=1
End If
If C = 1 and k = 1 Then
k=2
End If
If C = 0 and k = 2 Then
TracePrint i
Exit Do
End If
i=i+1
If x+i - h > 0 Then
MessageBox "宽度出错"
EndScript
End If
Loop
j = 0 : k = 0
Do
C = Plugin.Bkgnd.GetPixelColor(Hwnd, dx, y + j)
Call Plugin.Color.ColorToRGB(C, R, G, B)
If R<32 and G<32 and B<32 Then
C = 0
Else
C = 1
End If
If C = 0 and k = 0 Then
y = y + j
k=1
End If
If C = 1 and k = 1 Then
k=2
End If
If C = 0 and k = 2 Then
TracePrint j
Exit Do
End If
j=j+1
If y+j - h > 0 Then
MessageBox "高度出错"
EndScript
End If
Loop
dx = x mod i : dy = y mod j
m = 0 : n = 0 : k = 0
Do
x = dx + m * i
m=m+1
If x -w > 0 Then
Exit Do
End If
Do
y = dy + n * j
n = n + 1
If y-h >0 Then
n = 0
Exit Do
End If
XY = Plugin.Bkgnd.FindColor(Hwnd, x, y, x+i,y+j, "00FFFF")
If xy <> "-1|-1" Then
k = K + 1
S = "第" & k & "个坐标为" & xy
Call Plugin.File.WriteFileEx("C:\test.txt",S)
End If
Loop
Loop
更多追问追答
追问
不能将里面的色块当做是N个一样的图来执行吗
那些色块是完全一样的
追答
不一样的,你用抓抓看下每个黄色色块的左上角,很多都不一样
其实有很多方法来做这个脚本,如果你熟悉大漠插件的话就比较容易实现,他支持色偏
由于我用的都是找点的方式来执行的,理论上速度要比找图来的快
用找图方式如果图片文件做得不好很可能实现不了你要的想法
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询