读书人

VB处理图:循环中调用GetPixel的有关问

发布时间: 2012-02-07 17:45:36 作者: rapoo

VB处理图:循环中调用GetPixel的问题
在VB6中循环中调用GetPixel的问题:
'此代码能够达到我的目的(我玩热血江湖的想得到右上角的座标值):从图中识别
'字数字字符.运行刚开始还可以,但运行不久(1-3分钟)便要出错
'那位大侠告诉一下啊这是为什么啊...怎么运行不长啊....
'我想可能是频繁调用了getpixle函数,引起了内部的什么错误..因为连其他
'窗口的显示都会出错..代码也不是很效率..怎样才能效率些啊..
'

我在timer控件里放了如下代码: (6秒/次)运行一分钟左右.取图就会出现错误..导制显示不正常..请问是何故啊?????

Dim GetColor As Long, tmpcolor As String
Dim ColorR As Long, ColorG As Long, ColorB As Long
Dim strNum As String, strXY As String
Dim x0 As Long, y0 As Long
Dim MapMaxRed As Byte, MapMinRed As Byte, MapMaxGreen As Byte, _
MapMinGreen As Byte, MapMaxBlue As Byte, MapMinBlue As Byte

Dim i As Long, n As Long ', ii As Integer
Dim strT As String
strT = " "
strNum = " "
strXY = " "
x0 = 1024 - 147
y0 = 25

Do While strNum <> "? " And strNum <> "] "

'对一个字块扫8行.每行扫5个点
'对于红的(特别红些的点..肯定就是字符的点)
'所以对于每个字块,它上面是1或2或..等都有他自己的红点个数..以此定能判断字块上的123,,,,
ii = 0
For n = 0 To 7
For i = 0 To 4
hDCSrc = GetWindowDC(hWndScreen)
GetColor = GetPixel(hDCSrc, x0 + i, y0 + n)
ColorR = Val( "&H " & Mid$(GetColor, 1, 2)) ' CLng( "&H " + Right(GetColor, 2))
ColorG = Val( "&H " & Mid$(GetColor, 3, 2)) 'CLng( "&H " + Mid(GetColor, 3, 2))
ColorB = Val( "&H " & Mid$(GetColor, 5, 2)) 'CLng( "&H " + Left(GetColor, 2))
'ii = ii + 1
'Me.lab_back(ii).BackColor = RGB(ColorR, ColorG, ColorB)
'Me.lab_back(ii).Caption = ColorR & ". " & ColorG & ". " & ColorB
'If ColorR <= MapMaxRed And ColorR > = MapMinRed _
And ColorG <= MapMaxGreen And ColorG > = MapMinGreen _
And ColorB <= MapMaxBlue And ColorB > = MapMinBlue _
Then
If ColorR <= 24 And ColorR > = 18 And ColorG <= 19 And ColorG > = 9 And ColorB = 0 Then
tmpcolor = "1 "
Else
tmpcolor = "0 "
End If
strT = strT & tmpcolor
Next
Next

Select Case strT
Case "0111010001100011000110001100011000101110 "
strNum = "0 "
Case "0010001100001000010000100001000010001110 "
strNum = "1 "
Case "0111010001100010001000100010001000011111 "


strNum = "2 "
Case "0111010001000010011000001000011000101110 "
strNum = "3 "
Case "0001000110010100101010010011110001000011 "
strNum = "4 "
Case "1111110000100001111000001000011000101110 "
strNum = "5 "
Case "0111010010100001111010001100011000101110 "
strNum = "6 "
Case "1111110010000100010000100001000010000100 "
strNum = "7 "
Case "0111010001100010111010001100011000101110 "
strNum = "8 "
Case "0111010001100011000101111000010100101110 "
strNum = "9 "
Case "0000000000000001111100000000000000000000 "
strNum = "- "
Case "0000000000000000000000000000000000001000 "
strNum = ". "
Case "0001000010000100001000010000100001000010 "
strNum = "] "
Case Else
strNum = "? "
End Select
If strNum <> "? " And strNum <> "] " Then strXY = strXY & strNum
strT = " "
x0 = x0 + 6
Loop
Label17.Caption = strXY


[解决办法]
没看到ReleaseDC!
是你代码不全,还是根本没有?

若没有,那你的程序一定会因耗光系统资源,而英勇就义的!

读书人网 >VB

热点推荐