我允許我的應用程序的用戶選擇自定義顏色,並希望爲每種顏色顯示友好名稱,而不是顯示十六進制代碼的文本表示。確定最接近的已知顏色
如何找到給定的十六進制代碼最接近的System.Drawing.Color
?
我允許我的應用程序的用戶選擇自定義顏色,並希望爲每種顏色顯示友好名稱,而不是顯示十六進制代碼的文本表示。確定最接近的已知顏色
如何找到給定的十六進制代碼最接近的System.Drawing.Color
?
希望這有助於有人...
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
沒有真正的理由去執行一個(相對昂貴的)平方根,因爲最接近的距離平方與最接近的距離相同。此外,儘管它可能不會對您的結果產生太大影響,但在某些情況下,此方法可能不會產生知覺上「最接近」的顏色。你可能想看看這個答案的其他方法:http://stackoverflow.com/questions/4057475/rounding-colour-values-to-the-nearest-of-a-small-set-of-colours – Iridium
我一直在尋找一種方式這個昨天做!這將是很好,如果這是託管在某個網站的某個地方。然後,我們可以輸入數字並獲得顏色。 – Michael