我知道如何获得使用十六进制值的预定义颜色的名称,但如何获得颜色的名称,而近似其十六进制值是最接近的已知颜色。通过十六进制值获取颜色的名称?
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