我知道如何獲得使用十六進制值的預定義顏色的名稱,但如何獲得顏色的名稱,而近似其十六進制值是最接近的已知顏色。通過十六進制值獲取顏色的名稱?
7
A
回答
2
https://stackoverflow.com/a/7792104/224370解釋瞭如何將指定的顏色與精確的RGB值進行匹配。爲了使其近似,需要某種距離函數來計算顏色的距離。在RGB空間(R,G和B值差異的平方和)做這件事不會給你一個完美的答案(但可能足夠好)。有關這樣做的示例,請參見https://stackoverflow.com/a/7792111/224370。要獲得更準確的答案,您可能需要轉換爲HSL,然後進行比較。
5
下面是一些基於伊恩建議的代碼。我測試了一些顏色值,似乎運作良好。
GetApproximateColorName(ColorTranslator.FromHtml(source))
private static readonly IEnumerable<PropertyInfo> _colorProperties =
typeof(Color)
.GetProperties(BindingFlags.Public | BindingFlags.Static)
.Where(p => p.PropertyType == typeof (Color));
static string GetApproximateColorName(Color color)
{
int minDistance = int.MaxValue;
string minColor = Color.Black.Name;
foreach (var colorProperty in _colorProperties)
{
var colorPropertyValue = (Color)colorProperty.GetValue(null, null);
if (colorPropertyValue.R == color.R
&& colorPropertyValue.G == color.G
&& colorPropertyValue.B == color.B)
{
return colorPropertyValue.Name;
}
int distance = Math.Abs(colorPropertyValue.R - color.R) +
Math.Abs(colorPropertyValue.G - color.G) +
Math.Abs(colorPropertyValue.B - color.B);
if (distance < minDistance)
{
minDistance = distance;
minColor = colorPropertyValue.Name;
}
}
return minColor;
}
相關問題
- 1. 通過十六進制或RGB獲取顏色名稱
- 2. 從java中的十六進制代碼獲取顏色名稱
- 3. Php函數十六進制或rgb顏色的顏色名稱
- 4. 將十六進制顏色代碼轉換爲顏色名稱
- 5. 從十六進制顏色代碼中找到顏色名稱
- 6. 如何將十六進制值轉換爲顏色名稱
- 7. 將十六進制顏色值轉換爲近似顏色名稱的函數?
- 8. 字符串顏色名稱字符串顏色C#中的十六進制值
- 9. 轉換顏色的十六進制值
- 10. 訂購顏色的十六進制值
- 11. 過濾器十六進制顏色
- 12. 如何從java中的十六進制代碼獲取顏色的名稱?
- 13. 獲取顏色值十六進制代碼android
- 14. 獲取Excel單元格背景顏色十六進制值
- 15. 從UIColors中獲取RGB值從十六進制顏色派生
- 16. 獲取給定顏色十六進制代碼的較暗顏色十六進制代碼
- 17. 通過X和Y座標獲取圖像中的十六進制顏色
- 18. 顏色名稱爲RGB /十六進制/ HSL/HSV等
- 19. 在C#中將顏色名稱轉換爲十六進制
- 20. xsl檢查顏色是否是名稱或十六進制
- 21. 哪一個更快:十六進制顏色代碼或顏色名稱?
- 22. 以十六進制格式獲取畫布的背景顏色
- 23. 的ASP.NET獲取十六進制顏色日曆
- 24. 建議在CSS中輸入顏色的名稱而不是十六進制值?
- 25. 如何從android中的getColorFilter獲取顏色的十六進制值或rgb值
- 26. 十六進制顏色代碼瓶通配符過濾器
- 27. 獲取不同的十六進制值
- 28. 十三進制顏色的十六進制圖表
- 29. 獲取兩種顏色之間所有顏色的十六進制代碼?
- 30. 在Android中獲取十六進制顏色常量
Thankyou so muh Kartan ... :) – fresky 2012-07-31 21:10:54