帮忙优化下代码````CPU使用率 26% 汗
vb吧
全部回复
仅看楼主
level 6
cchcfei 楼主
2008年12月13日 11点12分 1
level 6
cchcfei 楼主
Picture1.ClsDim h As Long, r As RECTh = FindWindow(vbNullString, "form1") '这里写上你的窗口标题,必须一字不差GetWindowRect h, rxxx = r.Leftyyy = r.TopBitBlt Picture1.hDC, 0, 0, Picture1.Width, Picture1.Height, GetDC(0), xxx, yyy, vbSrcCopyReDim pixcol$(imagewidth, imageheight) 'tmpno = 1 For yy = 0 To imageheight - 1 For xx = 0 To imagewidth - 1 DoEvents colorval = GetPixel(Picture1.hDC, xx, yy) '按像素获得图片 Call getrgb If red = 255 And green = 255 And blue >= 34 And blue <= 60 Then keybd_event 56, 0, 0, 0 '模拟按下"8"键 Sleep 100 '延时200毫秒 keybd_event 56, 0, KEYEVENTF_KEYUP, 0 '8 Exit Sub End If Next xx Next yy
2008年12月13日 11点12分 2
level 0
注意获取了场景 要释放内存 否则内存占用越来越多CPU也会占用率高
2008年12月13日 12点12分 3
level 6
估计应该又是个写游戏外挂的。。。 For yy = 0 To imageheight - 1 For xx = 0 To imagewidth - 1 这个地方循环次数太多。。自然卡。。
2008年12月13日 12点12分 4
level 6
cchcfei 楼主
colorval = GetPixel(Picture1.hDC, xx, yy) 测试了下``是这句卡``其他的都没什么问题``怎么释放内存?~?
2008年12月13日 13点12分 5
level 0
Sleep延时很要命啊
2008年12月14日 05点12分 6
level 0
If red = 255 And green = 255 And blue >= 34 And blue <= 60 Then keybd_event 56, 0, 0, 0 '模拟按下"8"键 Sleep 100 '延时200毫秒 keybd_event 56, 0, KEYEVENTF_KEYUP, 0 '8 Exit Sub 运行这一段都不会卡的`
2008年12月14日 10点12分 7
level 0
截图程序吗?为什么需要For循环?楼主最好说明此过程用途
2008年12月14日 10点12分 8
level 0
楼主是要获取整个Picture1的每个像素点的像素吗?我最近刚好研究了一下用DIB获取要快很多Private Declare Fun百度ction DeleteObject Lib "gdi32" (ByVal hObject As Long) As LongPrivate Declare Fun百度ction GetCurrentObject Lib "gdi32" (ByVal Hdc As Long, ByVal uObjectType As Long) As LongPrivate Declare Fun百度ction GetDIBits Lib "gdi32" (ByVal aHDC As Long, ByVal hBitmap As Long, ByVal nStartScan As Long, ByVal nNumScans As Long, lpBits As Any, lpBI As BitMapInfo, ByVal wUsage As Long) As LongPrivate Type BitMapInfoHeader '文件信息头——BITMAPINFOHEADER biSize As Long '位图大小 biWidth As Long '宽度 biHeight As Long '长度 biPlanes As Integer biBitCount As Integer '信息头长度 biCompression As Long '压缩方式 biSizeImage As Long biXPelsPerMeter As Long biYPelsPerMeter As Long biClrUsed As Long biClrImportant As LongEnd TypePrivate Type RGBQuad '颜色表 rgbBlue As Byte rgbGreen As Byte rgbRed As ByteEnd TypePrivate Type BitMapInfo '位图信息头 bmiHeader As BitMapInfoHeader bmiColors As RGBQuadEnd TypePublic Sub GetPixelTable(ByVal Hdc As Long, XBegin As Long, ByVal YBegin As Long, ByVal XEnd As Long, ByVal YEnd As Long, Color() As Byte) '获取像素表 Dim bi24BitInfo As BitMapInfo '定义BMP信息 Dim iBitmap As Long ReDim Color(3, XEnd - XBegin, YEnd - YBegin) With bi24BitInfo.bmiHeader .biBitCount = 32 .biCompression = 0& .biPlanes = 1 .biSize = Len(bi24BitInfo.bmiHeader) .biWidth = XEnd - XBegin + 1 .biHeight = YEnd - YBegin + 1 End With iBitmap = GetCurrentObject(Hdc, 7&) Call GetDIBits(Hdc, iBitmap, 0&, YEnd - YBegin + 1, Color(0, 0, 0), bi24BitInfo, 0&) Call DeleteObject(iBitmap)End Sub
2008年12月17日 23点12分 10
level 0
这个数组Color(2, 0, 0)就是保存的像素矩阵Color(2, 0, 0) 坐标0,0的RGB的红色值Color(1, 0, 0) 坐标0,0的RGB的绿色值Color(0, 0, 0) 坐标0,0的RGB的蓝色值这里的Y坐标很奇怪是图象垂直翻转后的坐标请注意取得像素表后你可以再来循环判断你的颜色
2008年12月17日 23点12分 11
level 0
Picture1.ScaleMode = 3'Picture1用像素模式Call GetPixelTable(Picture1.Hdc, 0, 0, Picture1.ScaleWidth, Picture1.ScaleHeight, Color())这样就可以获取了
2008年12月17日 23点12分 12
level 0
楼主你的程序慢是因为GetPixel这个API函数的执行效率低的关系
2008年12月17日 23点12分 13
level 15
3条1.句柄得到一次就够了,不要放在循环内。2.不要用GetPixel,用picture1.Point(xx, yy)3.缩小图片,如12楼所说。你的算法很差,这种算法做不出好外挂。
2008年12月18日 01点12分 14
level 13
估计楼主是要取得 验证码For...Next 里面摆个 Sleep 不卡也得卡
2008年12月18日 02点12分 15
level 0
英雄本色
2010年04月21日 13点04分 16
level 0
DoEvents 挪到:
next 'xx
DoEvents
next 'yy
要效率就需要牺牲一些可读性,GETRGB又不复杂,把代码直接写在循环里:
RGB(255,255,34)=?
RGB(255,255,60)=?
事先算出来这个区间数值范围
2010年04月22日 01点04分 17
level 7
[瀑布汗~]
08年的
2010年04月22日 01点04分 18
1