找回密码
 加入
搜索
查看: 5457|回复: 12

[AU3基础] 模糊判断颜色的函数?

  [复制链接]
发表于 2011-5-24 22:11:39 | 显示全部楼层 |阅读模式
在帮助里找了半天只找到PixelGetColor ( x , y )这个颜色判断函数
想要个模糊判断颜色的函数不知道用那个  请高手告知 谢谢
发表于 2011-5-24 22:50:24 | 显示全部楼层
本帖最后由 tryhi 于 2011-5-24 23:02 编辑

分解出红绿蓝三色进行加减模糊判断


续:--------------------------------------
帮你写个函数吧,不知你是不是这个意思
发表于 2011-5-24 22:59:50 | 显示全部楼层
本帖最后由 tryhi 于 2011-5-24 23:11 编辑

回复 1# eett01
$color = PixelGetColor(100,100)
If color_mohu($color,0x123456,20) Then 
        MsgBox(0,0,"颜色与0x123456很接近,前后两个20个颜色范围")
Else
        MsgBox(0,0,"颜色不接近")
EndIf
Func color_mohu($color, $dui_bi_color,$zhi)
        $red = BitAND(BitShift($color, 16), 0xFF)
        $green = BitAND(BitShift($color, 8), 0xFF)
        $blue = BitAND($color, 0xFF)
        
        $redb = BitAND(BitShift($dui_bi_color, 16), 0xFF)
        $greenb = BitAND(BitShift($dui_bi_color, 8), 0xFF)
        $blueb = BitAND($dui_bi_color, 0xFF)
        If ($red > $redb - $zhi) And ($red < $redb+ $zhi) _
                        And ($green > $greenb - $zhi) And ($green < $greenb + $zhi) _
                        And ($blue > $blueb - $zhi) And ($blue < $blueb + $zhi) _
                        Then
                Return True
        EndIf
        Return False
EndFunc   ;==>color_mohu




另外说一下,分解红绿蓝有UDF函数,比如说_ColorGetBlue
另外,我的签名怎么不见了
 楼主| 发表于 2011-5-25 02:14:32 | 显示全部楼层
谢谢 楼上大大 就是要这个了 呵呵
 楼主| 发表于 2011-5-25 02:29:03 | 显示全部楼层
本帖最后由 eett01 于 2011-5-25 02:30 编辑

在补充个问题如果我用RGB色比较(不是用0x123456)这个函数需要怎么写呢?
如:
If color_mohu(x,y,30,30,30,20) Then
        MsgBox(x,y,"颜色与30,30,30这个颜色很接近,红绿蓝3个色都分别在20个颜色范围内")
Else
        MsgBox(x,y,"颜色不接近")
EndIf
发表于 2011-5-25 08:28:00 | 显示全部楼层
本帖最后由 tryhi 于 2011-5-25 15:07 编辑
在补充个问题如果我用RGB色比较(不是用0x123456)这个函数需要怎么写呢?
如:
If color_mohu(x,y,30,30 ...
eett01 发表于 2011-5-25 02:29



举一反三很重要,理解很重要



$color = PixelGetColor(100,100)
If color_mohu($color,30,30,30,20) Then 
        MsgBox( 0,0,"颜色与30,30,30这个颜色很接近,红绿蓝3个色都分别在20个颜色范围内")
Else
        MsgBox(0,0,"颜色不接近")
EndIf
Func color_mohu($$dui_bi_color, $red,$green,$blue,$zhi)
;~         $red = BitAND(BitShift($color, 16), 0xFF)
;~         $green = BitAND(BitShift($color, 8), 0xFF)
;~         $blue = BitAND($color, 0xFF)
        
        $redb = BitAND(BitShift($dui_bi_color, 16), 0xFF)
        $greenb = BitAND(BitShift($dui_bi_color, 8), 0xFF)
        $blueb = BitAND($dui_bi_color, 0xFF)
        If ($red > $redb - $zhi) And ($red < $redb+ $zhi) _
                        And ($green > $greenb - $zhi) And ($green < $greenb + $zhi) _
                        And ($blue > $blueb - $zhi) And ($blue < $blueb + $zhi) _
                        Then
                Return True
        EndIf
        Return False
EndFunc   ;==>color_mohu
 楼主| 发表于 2011-5-25 13:14:47 | 显示全部楼层
嘿嘿 谢谢 复制下来慢慢学习
 楼主| 发表于 2011-5-25 14:15:57 | 显示全部楼层
测试修改了下 这样就可以正常运行了 嘿嘿
        $color = PixelGetColor(100,100)
If color_mohu($color,30,30,30,20) Then 
        MsgBox( 0,0,"颜色与30,30,30这个颜色很接近,红绿蓝3个色都分别在20个颜色范围内")
Else
        MsgBox(0,0,"颜色不接近")
EndIf
Func color_mohu($color, $red,$green,$blue,$zhi)
        $redb = BitAND(BitShift($color, 16), 0xFF)
        $greenb = BitAND(BitShift($color, 8), 0xFF)
        $blueb = BitAND($color, 0xFF)
        If ($red > $redb - $zhi) And ($red < $redb+ $zhi) _
                        And ($green > $greenb - $zhi) And ($green < $greenb + $zhi) _
                        And ($blue > $blueb - $zhi) And ($blue < $blueb + $zhi) _
                        Then
                Return True
        EndIf
        Return False
EndFunc   ;==>color_mohu
发表于 2011-6-18 17:12:31 | 显示全部楼层
不错呀看看
发表于 2011-6-18 17:12:35 | 显示全部楼层
不错呀看看
发表于 2011-6-18 21:55:04 | 显示全部楼层
学习了..顶一个
发表于 2011-6-19 14:44:07 | 显示全部楼层
这个真好~~~
发表于 2011-6-20 08:58:43 | 显示全部楼层
我用了不怎么好用呀
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-11-15 01:19 , Processed in 0.080002 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表