C#/vbscript判断2个样色是否相似
C#/vbscript判断2个样色是否相似,算法如下
RGB是个3维空间,分别计算两个颜色在这个空间的两个坐标点的直线距离,便是两个颜色的色差。
色差Cv=SQR(AbsR^2+AbsG^2+AbsB^2)
CS=阀值
CV<=CS为相似
CV>CS为不相似
CS阀值最大为442【RGB(0,0,0)与RGB(255,255,255)的色差】
C#t判断2个样色是否相似源代码
/// <summary> /// 判断颜色是否和主颜色相似 /// </summary> /// <param name="c1">颜色1</param> /// <param name="c2">颜色2</param> /// <param name="colorThreshold">2个样色相差的伐值</param> /// <returns></returns> public bool ColorIsSimilar(Color c1, Color c2, double colorThreshold) { double differ = Math.Sqrt(Math.Pow(Math.Abs(c1.R - c2.R), 2) + Math.Pow(Math.Abs(c1.G - c2.G), 2) + Math.Pow(Math.Abs(c1.B - c2.B), 2)); return differ <= colorThreshold; }
vbscript判断2个样色是否相似源代码
Type tpColorRGB coR As Byte coG As Byte coB As Byte End Type Public Function ColorValueComp(ByVal pColorA As Long, ByVal pColorB As Long) As Long '获得两个Long类型颜色的色差。 Dim tOutValue As Long Dim tColorA As tpColorRGB Dim tColorB As tpColorRGB tColorA = ColorRGBGetByValue(pColorA) tColorB = ColorRGBGetByValue(pColorB) tOutValue = ColorRGBComp(tColorA, tColorB) ColorValueComp = tOutValue End Function Public Function ColorRGBGetByValue(ByVal pColorValue As Long) As tpColorRGB '从一个Long类型的颜色数据获得一个ColorRGB类型。 Dim tOutColor As tpColorRGB With tOutColor .coR = pColorValue Mod 2 ^ 8 .coG = (pColorValue \ 2 ^ 8) Mod 2 ^ 8 .coB = (pColorValue \ 2 ^ 16) Mod 2 ^ 8 End With ColorRGBGetByValue = tOutColor End Function Public Function ColorRGBComp(ByRef pColorA As tpColorRGB, ByRef pColorB As tpColorRGB) As Long '获得两个ColorRGB的色差。 Dim tOutValue As Long Dim tAbsR As Long Dim tAbsG As Long Dim tAbsB As Long tAbsR = Abs(CLng(pColorA.coR) - CLng(pColorB.coR)) tAbsG = Abs(CLng(pColorA.coG) - CLng(pColorB.coG)) tAbsB = Abs(CLng(pColorA.coB) - CLng(pColorB.coB)) tOutValue = Sqr(tAbsR ^ 2 + tAbsG ^ 2 + tAbsB ^ 2) ColorRGBComp = tOutValue End Function Public Function ColorValueIsBorder(ByVal pColorA As Long, ByVal pColorB As Long, ByVal pValve As Long) '在容差pValve的范围内,比较两个颜色是否近似。 Dim tOutValue As Boolean Dim tCompValue As Long tCompValue = ColorValueComp(pColorA, pColorB) tOutValue = tCompValue <= pValve ColorValueIsBorder = tOutValue End Function
用法
CS=ColorValueIsBorder(RGB(255, 252, 255), RGB(255, 255, 252), 4)
来源:http://blog.163.com/lh_bbs/blog/static/1430708032010817113734404/
加支付宝好友偷能量挖...