首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

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

2012-02-07 
VB处理图:循环中调用GetPixel的问题在VB6中循环中调用GetPixel的问题:此代码能够达到我的目的(我玩热血江

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!
是你代码不全,还是根本没有?

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

热点排行