【问题标题】:Determine Closest Known Color确定最接近的已知颜色
【发布时间】:2013-10-11 16:49:26
【问题描述】:

我允许我的应用的用户选择自定义颜色,并希望有一种方法可以为每种颜色显示一个友好的名称,而不是显示十六进制代码的文本表示。

如何为给定的十六进制代码找到最接近的System.Drawing.Color

【问题讨论】:

  • 我昨天正在寻找一种方法!如果它托管在某个网站上,那就太好了。然后我们就可以输入数字并输出颜色。

标签: asp.net .net vb.net colors


【解决方案1】:

希望这对某人有所帮助...

Public Function GetClosestColor(hex_code As String) As Color
    Dim c As Color = ColorTranslator.FromHtml(hex_code)
    Dim closest_distance As Double = Double.MaxValue
    Dim closest As Color = Color.White

    For Each kc In [Enum].GetValues(GetType(KnownColor)).Cast(Of KnownColor).Select(Function(x) Color.FromKnownColor(x))
        'Calculate Euclidean Distance
        Dim r_dist_sqrd As Double = Math.Pow(CDbl(c.R) - CDbl(kc.R), 2)
        Dim g_dist_sqrd As Double = Math.Pow(CDbl(c.G) - CDbl(kc.G), 2)
        Dim b_dist_sqrd As Double = Math.Pow(CDbl(c.B) - CDbl(kc.B), 2)
        Dim d As Double = Math.Sqrt(r_dist_sqrd + g_dist_sqrd + b_dist_sqrd)

        If d < closest_distance Then
            closest_distance = d
            closest = kc
        End If
    Next

    Return closest
End Function

【讨论】:

  • 没有真正的理由执行(相对昂贵的)平方根,因为距离最近的平方与距离最近的平方相同。此外,虽然它可能不会对您的结果产生太大影响,但在某些情况下,此方法可能不会产生感知上“最接近”的颜色。您可能想看看其他方法的答案:stackoverflow.com/questions/4057475/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-19
  • 2011-05-27
  • 2019-07-02
  • 2014-10-26
相关资源
最近更新 更多