收藏 分销(赏)

学习脚本制作:用按键精灵找图找色 RGB分量之偏色与彩色图片转黑白.docx

上传人:xrp****65 文档编号:7430234 上传时间:2025-01-04 格式:DOCX 页数:7 大小:4.02MB 下载积分:10 金币
下载 相关 举报
学习脚本制作:用按键精灵找图找色 RGB分量之偏色与彩色图片转黑白.docx_第1页
第1页 / 共7页
学习脚本制作:用按键精灵找图找色 RGB分量之偏色与彩色图片转黑白.docx_第2页
第2页 / 共7页


点击查看更多>>
资源描述
学习脚本制作:用按键精灵找图找色 RGB分量之偏色与彩色图片转黑白 来源:按键学院 【按键精灵】     颜色对于制作脚本来说是至关重要的,找图找字找色都需要使用到颜色。所以,对颜色的认识是也是非常重要的。 颜色知识大解剖                                                                                                           【 颜色是由三原色混合形成的】 *    即红、绿、蓝。三原色可以混合出所有的颜色。 *   我们通常把三原色简称为RGB(R、G、B是红(Red)、绿(Green)、蓝(Blue)的缩写) *    R的值区间是 0~255  这是十进制,转换成十六进制就是:00-FF   (G、B也是一样) 【 RGB】 *我们前面说,一个颜色是由三原色RGB构成的,例如白色(R、G、B值都为255时显示白色): *十六进制表示:FFFFFF (十六进制一共有六位,每两位表示一个原色) *十进制表示:255,255,255                                                           【 按键精灵颜色表示格式BGR】 应该有很多童鞋都知道,其实,我们按键的颜色表示并不是RGB的顺序来表示的,按键使用的表示方式是BGR,把R和B的位置互换了。    所以,有的时候,我们可能会遇到这样的情况: 甲:“为什么!为什么我用XX颜色工具获取到的颜色不能识别!” 乙:“哎呀,你看看你代码啊,那么乱说不定哪里错了。” 甲:“滚!给我圆滚滚的滚!哥的代码虽乱但那都是精华,怎么会错。" 甲因为不知道颜色知识,不知道按键颜色排列是BGR,也不知道xx颜色工具获取的颜色排列是RGB,所以苦恼了很久都没有找到问题所在。 【 RGB颜色格式转换为BGR】 如果我们遇到这样的情况怎么办呢?其实,解决方法不麻烦,你看,一个BGR 一个RGB,就是把RB的位置调换了而已,那再把它调回来不就得了么? 问题是……要怎么个调法? 例如:FF0033 我们的思维很快,一秒钟就换过来了,RGB变成BGR 前后两位互调,那就是3300FF 换成代码思路也不麻烦: 1、获取颜色值:FF0033 2、用字符处理函数分割获取到的颜色值:FF|00|33 分别赋值给变量 R、G、B 3、将RGB三个字符变量合成,顺序为BGR 那么生成代码就是这个样子: sColor = "FF0033"   LenRGB = Len(sColor)  R= Mid(sColor, 1, 2) G= Mid(sColor, 3, 2) B= Mid(sColor, 5, 2) MessageBox "BGR:" &B & G&R 按键中还有个更方便的命令,不过这个命令,分出来的值是十进制的值:      GetColor ="FF0033"      Call Plugin.Color.ColorToRGB(GetColor, R, G, B)      Msgbox " R:" & R & vbcrlf & " G:" & G & vbcrlf & " B:" & B   RGB分量之偏色                                                                                                            【大漠找字中的偏色】 上面说到,把颜色分割成RGB三原色(分割颜色又称为分量),那么,分割颜色除了转换RGB,BGR还有其它的功用吗? 答案是肯定的,应该有很多童鞋都使用过大漠工具,在大漠工具找字里,可以设置偏色。 偏色是什么呢?就是设定一个颜色范围,当获取的颜色在这个范围内的时候都能找到。对偏色不熟悉的童鞋可以看下我们之前的院刊帖子,关于大漠找字偏色的帖子: 偏色,听起来很深奥的样子,它其实就是由我们的RGB分量来实现的。 偏色大致思路: 1、设置颜色范围 例如:0000FF-FFFFFF 2、 获取颜色值,并且使用ColorToRGB 命令把颜色值进行分量,赋值给变量R、G、B 3、获取颜色范围0000FF,用colorToRGB命令将它分量,赋值给变量R1、G1、B1 4、获取颜色范围FFFFFF,用colorToRGB命令将它分量,赋值给变量R2、G2、B2 5、判断颜色值是否超过设定的范围 参考代码如下: min = "0000FF " max ="FFFFFF" GetColor=GetPixelColor(0, 0) //获取0,0点颜色 Call Plugin.Color.ColorToRGB(GetColor, R, G, B) //将0,0点颜色分割 Msgbox "RGB值:"& R&","& G&","&B   Call Plugin.Color.ColorToRGB(min, R1, G1, B1)//将最小范围颜色 000000 分割 Call Plugin.Color.ColorToRGB(max, R2, G2, B2)//将最大范围颜色 FFFFFF 分割 S = S & "R:" & R1 & "~" & R2 & vbcrlf S = S & "G:" & G1 & "~" & G2 & vbcrlf S = S & "B:" & B1 & "~" & B2 & vbcrlf Msgbox "RGB分量区间(偏色范围):"& vbcrlf & vbcrlf & S If R<= R2 and R>= R1 and G<= G2 and  G>= G1 and B<= B2 and B>=B1 Then  //判断是否在000000-FFFFFF范围内     MessageBox "该点颜色值在"& min &"~" & max &"范围内。" Else     MessageBox  "该点颜色值不在"& min &"~" & max &"范围内。" End If RGB分量之彩色图片转黑白                                                                                                              那我们的RGB分类还有没有其他的功用呢? 答案是肯定的,例如,彩色照片转换成黑白照片,还有大漠工具里的二值化,这些都是通过RGB颜色分量来实现的。 【那么,怎样才能让颜色二值化变成黑白两色呢?】 首先,我们要先了解下一个阈值这个东西,它是基于图片亮度的一个黑白分界值,默认值是50%中性灰,既128,亮度高于128(<50%的灰)的会变白,低于128(>50%的灰)的会变黑. 简单的理解:阈值就是颜色的分解线,利用这条分界线,我们就可以将彩色的图片转换为黑白的。 【二值化转换思路】 1、获取要转换为黑白颜色的图片区域 2、取出区域里的每个像素点 3、把这些像素点的颜色进行分量,如果RGB三原色的平均值大于128则把该像素点的颜色修改为白色,小于则修改为黑色 (也可以大于128的修改为黑色,小于的为白色) 参考代码如下: Dim My(63,63) //定义二维数组 ——需要二值化的区域 For x= 0 To 63     For y = 0 To 63         GetColor = GetPixelColor(x, y) //获取区域里每个像素点的颜色         If 二值化(GetColor) = 1 Then  //调用二值化函数判断是当前颜色点是否大于128             My(x, y) = "000000"                 //小于则输出黑色         Else              My(x,y) = "FFFFFF" //大于则输出白色         End If     Next Next Function 二值化(sColor)     二值化= 1     Plugin.Color.ColorToRGB sColor, R, G, B //将颜色值分量     If (R + G + B) / 3+1 >= 128 Then 二值化 = 0   //如果RGB平均值大于128  End Function ///////////////用屏幕输出命令打印出图像/////// For i = 63 To 0 step -1  //为什么是倒着的顺序呢?因为█这个符号所打印出来的图像会出现白色的间隙,倒着打印可以盖住这些间隙     For j = 63 To 0 step -1         Call Plugin.Msg.ShowScrTXT(i, j, i+10, j+10, "█",My(i, j) ) //█这个符号用来代表像素点,My(i, j) 这里面存放的颜色值决定像素点的颜色。     Next Next 效果图: 左边是原图,右边是二值化的。 拓展: 我们还可以修改这一段,当RGB平均值大于128 时输出绿色 If 二值化(GetColor) = 1 Then  //调用二值化函数判断是当前颜色点是否大于128             My(x, y) = "6EB33A"                 //小于则输出绿色         Else              My(x,y) = "FFFFFF" //大于则输出白色         End If 效果图: 左边是原图,右边是二值化的。 【有没有更简便的方法呢?】    有的,可以使用365插件里的Binarization 二值化颜色命令来实现:    代码如下: Dim My(63,63) //定义二维数组 ——需要二值化的区域 For x= 0 To 63     For y = 0 To 63         GetColor = GetPixelColor(x, y)//获取区域里每个像素点的颜色          二值化= Plugin.Plug365New.Binarization  (GetColor,128)         If 二值化 = 1 Then  //调用二值化函数判断是当前颜色点是否大于128             Plugin.Plug365New.SetColorPoint 0,x,y,"000000"         Else               Plugin.Plug365New.SetColorPoint 0,x,y,"FFFFFF"         End If     Next Next
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 应用文书 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服