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/

加支付宝好友偷能量挖...


评论(0)网络
阅读(276)喜欢(0)Asp.Net/C#/WCF