我允许我的应用的用户选择自定义颜色,并想要一种方法来显示每种颜色的友好名称,而不是显示十六进制代码的文本表示。
如何为给定的十六进制代码找到最接近的System.Drawing.Color
?
答案 0 :(得分: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