找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3800|回复: 0
打印 上一主题 下一主题
收起左侧

按键精灵自定义公用函数

[复制链接]
跳转到指定楼层
楼主
ID:26188 发表于 2015-2-18 01:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
[General]
MacroID=56ea1fce-b961-4037-8ec0-751af08ee19b
SyntaxVersion=1
Description=公用函数
[Script]
//请在下面写上您的子程序或函数
//写完保存后,在任一命令库上点击右键并选择“刷新”即可
Function RGB转Y(颜色字符串)
Dim R : dim G : dim B
R=clng("&h"&mid(颜色字符串,1,2))
G=clng("&h"&mid(颜色字符串,3,2))
B=clng("&h"&mid(颜色字符串,5,2))
RGB转Y = 0.29 * R + 0.6 * G + 0.11 * B
End function
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Function 找重复最多的值(数组字符串)
Dim 主数组 : Dim 主数组下标 : Dim 累加记数
Dim 重复数组字串 : Dim 重复数组 : Dim 重复数组下标 : Dim 重复标记 : Dim 重复数 : Dim 重复次数
Dim i : Dim j : Dim k
主数组=split(数组字符串,"|")
主数组下标=(ubound(主数组))-1
重复数=0
重复次数 =0
For i= 0 to 主数组下标-1
    累加记数=0
    重复数组=split(重复数组字串,"|")
    重复数组下标=(ubound(重复数组))-1
    For k= 0 to 重复数组下标
        if 主数组(i)=重复数组(k) then
            重复标记=1
        Else
            重复标记=0
        end if
    Next
    If 重复标记=0 then
        For j = i+1 to 主数组下标
            If 主数组(i)=主数组(j) then
                累加记数=累加记数+1
            End if
        Next
        If 累加记数>0 then
            重复数组字串=重复数组字串&cstr(主数组(i))&"|"
            If 累加记数>重复次数 then
                重复数 = 主数组(i)
                重复次数 = 累加记数
            end if
        end if
    end if
Next
找重复最多的值 =重复数
end function
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function 找多个相同图形(被找图像宽,被找图像高,x起点,y起点,x终点,y终点,被找起点颜色,被找颜色偏移)
//下文是用来在限定四边形范围内查找多个无跌加状态正四边形图形的算法流程
Dim 相似度变量 : dim 相似度终值 : dim x起点变量 : dim y起点变量 : dim y终点变量
Dim temp0 : dim temp1 : dim x : dim y
相似度变量=.9 : 相似度终值 =.4 : x起点变量 = x起点 : y起点变量 = y起点 : y终点变量 = y终点 : 找多个相同图形 = ""
While 相似度变量 > 相似度终值
    temp0=Plugin.Color.FindMutiColor(x起点变量,y起点变量,x终点, y终点变量,被找起点颜色,被找颜色偏移,相似度变量)
    temp1 = split(temp0,"|") : x = Clng(temp1(0)) : y = Clng(temp1(1))
    If x > 0 and y > 0 then
        x起点变量 = x + 被找图像宽 : y起点变量 = y :  y终点变量 = y + 被找图像高 : 找多个相同图形 = 找多个相同图形&x&","&y&"|"
        While x起点变量 < x终点 - 被找图像宽 + 1 and y起点变量 < y终点 - 被找图像高 + 1
            temp0=Plugin.Color.FindMutiColor(x起点变量,y起点变量,x终点, y终点变量,被找起点颜色,被找颜色偏移,相似度变量)
            temp1 = split(temp0,"|") : x=Clng(temp1(0)) : y=Clng(temp1(1))
            If x > 0 and y > 0 then
                x起点变量 = x + 被找图像宽 : y起点变量 = y :  y终点变量= y + 被找图像高 : 找多个相同图形 = 找多个相同图形&x&","&y&"|"
            Else
                If x起点变量 <> x起点
                    x起点变量 = x起点 : y起点变量 = y起点变量 + 1 : y终点变量 = y终点
                Else
                    x起点变量 = x起点 - 被找图像宽 : y起点变量 = y终点 - 被找图像高
                end if
            end if  
        wend
        相似度变量 = 相似度终值
    Else
        相似度变量 = 相似度变量 - .1
    end if
Wend
End function
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Function 区域内找颜色突出的值(x轴起点,y轴起点,x轴终点,y轴终点)
Dim 背景色 : Dim 红值 : Dim 蓝值 : Dim 黄值 : Dim 背景亮度
Dim 采样色 : Dim 采样大小: Dim 采样亮度 : Dim 域值测试 : Dim 域值 : Dim 颜色数组集
Dim i : Dim x : Dim y : Dim 步进
背景色 = array("","","","") : 红值 = 0 : 蓝值 = 0 : 黄值 = 0
采样大小 = 32 : 域值 = 33
//取四个角的色值,作为判断排除的依据
背景色(0)=GetPixelColor(x轴起点,y轴起点) : 背景色(1)=GetPixelColor(x轴终点,y轴起点)
背景色(2)=GetPixelColor(x轴起点,y轴终点) : 背景色(3)=GetPixelColor(x轴终点,y轴终点)
For i = 0 TO 3
   红值 = 红值 + clng("&H"&(mid(背景色(i),1,2)))
   蓝值 = 蓝值 + clng("&H"&(mid(背景色(i),3,2)))
   黄值 = 黄值 + clng("&H"&(mid(背景色(i),5,2)))   
Next
红值 = 红值\4 : 蓝值 = 蓝值\4 : 黄值 = 黄值\4
背景亮度 = (0.29 * 红值 + 0.6 * 蓝值 + 0.11 * 黄值)\1
//采样
If (x轴终点-x轴起点) > (y轴终点-y轴起点) then
    步进 = (x轴终点-x轴起点)\32
Else
    步进 = (y轴终点-y轴起点)\32
end if
For y = y轴起点 to y轴终点 step 步进
    For x = x轴起点 to x轴终点 step 步进
        采样色=GetPixelColor(x,y)
        采样亮度 = lib.公用函数.RGB转Y(Cstr(采样色))
        域值测试 = (((abs(采样亮度-背景亮度))/255)*100)\1
        If 域值测试>域值 then
            颜色数组集 = 颜色数组集&cstr(采样色)&"|"
        end if
    Next
Next
区域内找颜色突出的值 = 颜色数组集
End function
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Function 查找包络(x轴起点,y轴起点,x轴终点,y轴终点,颜色)
//2010/05/06 tankli88 zt_script,sub 包络范围 
//在匀色背景中,查找颜色突出区域的包络范围
//调用插件从左向右,从上向下查找,查找相似度域值,得到包络范围的最小Y坐标.第一次查找,x起点变量为包络范围的最小X坐标,第二次x起点变量为包络范围的最大X坐标,第三次y起点变量为包络范围的最大Y坐标
//查找方式,二分收敛
dim 判断条件 : dim 相似度变量 : dim x :dim y : dim x变量
Dim x起点变量 : dim x终点变量 : dim y起点变量 : dim y终点变量
Dim x起点常量 : dim x终点常量 : dim y起点常量 : dim y终点常量
判断条件 = 1 : 相似度变量 = .9
While 判断条件 <> 0
    FindColorEx x轴起点,y轴起点,x轴终点,y轴终点,颜色,0,相似度变量,x,y
    If x > 0 and y > 0
        判断条件 = 0
        ///////////////
        x变量 = x : y起点常量 = y : x起点变量 = x轴起点 : x终点变量 = x起点变量 + (x - x起点变量)\2 :
        While (x变量-x起点变量) > 1
            FindColorEx x起点变量,y起点常量,x终点变量,y轴终点,颜色,0,相似度变量,x,y
            If x > 0 and y > 0
                x变量 = x : x终点变量 = x起点变量 + (x - x起点变量)\2
            Else
                x起点变量 = x终点变量 : x终点变量 = x起点变量 + (x变量 - x起点变量)\2
            End If
        wend
        ///////////////
        x起点常量 = x起点变量 + 1 :  x终点变量 = x轴终点 : x起点变量 = x起点常量 + (x终点变量 - x起点常量)\2
        While (x终点变量-x起点变量) > 1
            FindColorEx x起点变量,y起点常量,x终点变量,y轴终点,颜色,0,相似度变量,x,y
            If x > 0 and y > 0
                x起点变量 = x + (x终点变量 - x)\2
            Else
                x终点变量 = x起点变量 : x起点变量 = x终点变量 - (x终点变量 - x起点常量)\2
            End If
        wend
        ///////////////
        x终点常量 = x起点变量 + 1 : y终点变量 = y轴终点 : y起点变量 = y起点常量 + (y终点变量 - y起点常量)\2
        While (y终点变量-y起点变量) > 1
            FindColorEx x起点常量,y起点变量,x终点常量,y终点变量,颜色,0,相似度变量,x,y
            If x > 0 and y > 0
                y起点变量 = y + (y终点变量 - y)\2
            Else
                y终点变量 = y起点变量 : y起点变量 = y终点变量 - (y终点变量 - y起点常量)\2
            End If
        wend
        y终点常量 = y起点变量 + 1
    else
        相似度变量 = 相似度变量 - .1
    End if
wend
查找包络 = cstr(x起点常量)&"|"&cstr(y起点常量)&"|"&cstr(x终点常量)&"|"&cstr(y终点常量)
End Function
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Function 自动查找包络(x轴起点,y轴起点,x轴终点,y轴终点)
Dim 颜色数组字符串: dim 颜色
颜色数组字符串 = lib.公用函数.区域内找颜色突出的值(x轴起点,y轴起点,x轴终点,y轴终点)
颜色 = lib.公用函数.找重复最多的值(颜色数组字符串)
自动查找包络 = lib.公用函数.查找包络(x轴起点,y轴起点,x轴终点,y轴终点,颜色)
End function

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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