请教关于PixelGetColor在win7系统下的效率问题
因为在win7系统下做ocr研究,发现通过使用PixelGetColor截取矩形区域点阵的时候速度非常缓慢,一次性获取1000个像素点颜色基本要花费超过1分钟的时间,而同样的操作在xp系统下只需要0.025s,甚至更少当然我也在win7下找到了临时解决的办法,就是将系统主题更换为 Windows 7 Basic,这样上面的操作在win7系统下也可以在100毫秒内执行完成
想请教各位,有没有其它的解决办法,毕竟每次调整系统主题不是最好的解决办法,我在网上看到AHK也遇到了类似的问题,貌似他们官网提供了一个fastpixelgetcolor()函数专门用于win7系统,想请教一下我们的Au3应该如何解决这个问题,毕竟现在使用win7系统的朋友已经越来越多了,谢谢
再发一下这个问题,看看有人知道怎么处理吗,好纠结的一个问题 路过帮忙顶起! 用大漠插件试试,速度快很多
还有直接ocr功能 本帖最后由 happytc 于 2012-5-24 20:50 编辑
回复 1# opq6789
我猜,我猜,我猜猜猜!
你的Win7肯定开启了DWM,你关掉之后你就会发现速度马上就上去了,估计可以提高1000倍!
所以解决方法也就出来了:
① 关掉DWM后再用PixelGetColor函数
② 用_GDIPlus_BitmapLockBits替代PixelGetColor,_GDIPlus_BitmapLockBits不受DWM影响,(怎么用?别问我,你可以搜索我关于一个‘马赛克’帖子的回复),就是不开启DWM,前者效率也比后者高上10来倍
http://www.autoitx.com/forum.php?mod=viewthread&tid=31334&extra=&highlight=%C2%ED%C8%FC%BF%CB&page=2 回复 1# opq6789
你把那个ahk的什么fastpixelgetcolor()函数帖出来看看
说不定就是采用了上面我说的方法二呢 回复 4# happytc
呵呵,谢谢,这会儿在朋友这里不方便,我明天仔细研究下再上来回复
另外今天下午在autoit的官网上看到有国外的朋友也有很多遇到类似的问题,貌似autoit官方给出的解决方法也是建议关闭DWM,明天一并研究下 回复 3# magusneo
谢谢,回头研究一下,不过我要做的ocr必须达到100%识别,所以很多第三方朋友的插件我都没有办法用,只能自己写 回复 4# happytc
通过粗略的搜索Autoit官方站点,发现这个问题Autoit一直没有官方正面解决,大部分方法都是大家自己研究出来的,目前主要的解决办法有几种,分别如下:
1、关闭DWM,关闭的方法主要有以下几种
- 切换win7主题,面右键 -> 个性化 -> 选择window7 Basic桌面主题
- 直接任务管理器Kill dwm.exe进程2次
- 停止Desktop Window Manager服务
- 或者在软件中加入调用如下代码,自动检测是否开启了dwm,然后临时关闭,软件退出后自动恢复If _DwmIsEnabled() = True Then DllCall("dwmapi.dll", "uint", "DwmEnableComposition", "int", 'False')
Func _DwmIsEnabled()
If FileExists(@SystemDir & "\dwmapi.dll") Then
$Receiver = DllStructCreate("int")
$aTemp = DllCall("dwmapi.dll", "uint", "DwmIsCompositionEnabled", "ptr", DllStructGetPtr($Receiver, 1))
$Receiver2 = DllStructCreate("int", $aTemp)
If DllStructGetData($Receiver2, 1) = True Then
Return 1
Else
Return SetError(1, 0, 0)
EndIf
Else
Return SetError(2, 0, 0)
EndIf
EndFunc2、通过ScreenCapture截取屏幕到内存,然后直接从内存中读取相应点的像素
- 这个我具体没有时间测试效率如何,感觉应该也很快,代码和例子发布出来大家可以一起研究研究
3、另外happytc 的用_GDIPlus_BitmapLockBits替代PixelGetColor的方法应该也是可行的,具体的效率我还没有测试,一起总结进来
http://www.autoitx.com/forum.php?mod=viewthread&tid=31334&extra=&highlight=%C2%ED%C8%FC%BF%CB&page=2 我曾经也遇到这个问题 我一直以为是我电脑的问题 后来换大漠了现在知道原因了也好。
页:
[1]