4

アプリのユーザーがカスタム カラーを選択できるようにし、16 進コードのテキスト表現を表示する代わりに、各色のフレンドリ名を表示する方法が必要です。

System.Drawing.Color特定の 16 進コードに最も近いものを見つけるにはどうすればよいですか?

4

1 に答える 1

4

これが誰かに役立つことを願っています...

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
于 2013-10-11T16:49:26.073 に答える