rreading=1 const forwriting=2 const forappending=8 const ParaGrayLevel = 70 //灰度:黑底 则 >ParaGrayLevel 为1 小于为0 //灰度:白底 则 <ParaGrayLevel 为1 大于为0 //灰度:白底时,此值应设大些,比如200 //Dim GA( 4, 10 ) Dim GA( 20, 20 ) // 英雄无敌中,一个数字为4*9 Dim MyArray, Rx, Ry //单点调试用 //Rx = GetPosNum( "981,6", 4, 9 ) //MessageBox Rx // Rx = GetPosNum( "939,6", 4, 9 )&GetPosNum( "945,6", 4, 9 )&GetPosNum( "951,6", 4, 9 ) Ry = GetPosNum( "969,6", 4, 9 )&GetPosNum( "975,6", 4, 9 )&GetPosNum( "981,6", 4, 9 ) MessageBox Rx&","&Ry Function GetPosNum( XYbegin, MyXStep, MyYStep ) //XYbegin=数字的左上角坐标 (游戏屏幕坐标) //MyXStep=X轴步长 //MyYStep=Y轴步长 Dim MyArray Dim Rx, Ry, Num Dim Rs GetPosNum = -1 //数组溢出判断 If MyXStep > 10 or MyXStep < 1 Then If MyXStep > 10 or MyXStep < 1 Then If InStr( XYbegin, "," ) = 0 Then Goto EndOfGetPosNum End If End If End If //初始化数组 For i = 1 to MyXStep+10 For j = 1 to MyYStep+10 GA( i, j ) = -1 Next Next //建立灰度表 MyArray = Split( XYbegin, ",") Rx = CInt( MyArray(0) ) Ry = CInt( MyArray(1) ) For i = 1 to MyXStep For j = 1 to MyYStep Rs = GetPixelColor( Rx + i - 1, Ry + j - 1 ) If GetRedOfRGB( Rs ) > ParaGrayLevel Then //白底则用 < ParaGrayLevel GA( i, j ) = 1 Else GA( i, j ) = 0 End If Next Next str = "" For j = 1 to 9 For i = 1 to 4 Str = Str & GA( i, j )&"|" Next Str = Str & vbCrlf Next //调用GetNum判断是数字0--9中的哪个 Num = GetNum( MyXStep, MyYStep ) GetPosNum = Num //返回值格式为: 指定区域翻译过来的数字0--9 Rem EndOfGetPosNum //调试找特征用 //MessageBox Str&Num End Function Function GetNum( MyXStep, MyYStep ) //对全局变量ParaGrayLevel进行特征比对 Dim parallel //初始化返回值,-1为未找到匹配的特征 GetNum = -1 //进行特征判断,分别是0--9共10个数字 For parallel = 1 to 10 //原本只需用指定位置进行对比就可以 //这里用相对移动的判断, //是为了图形数字识别作准备 For i = 1 to MyXStep For j = 1 to MyYStep //2*5的空洞,为0 Fs = "" & GA( i, j ) & GA( i+1, j ) Fs = Fs & GA( i, j+1 ) & GA( i+1, j+1 ) Fs = Fs & GA( i, j+2 ) & GA( i+1, j+2 ) Fs = Fs & GA( i, j+3 ) & GA( i+1, j+3 ) Fs = Fs & GA( i, j+4 ) & GA( i+1, j+4 )