有谁知道将颜色代码更改为颜色名称的方法吗?我有一个带有颜色代码的 XML:
我需要:#FFFFFF
替换为 White
和 #000000
替换为 Black
等
如果您知道脚本、批处理、C# 程序或其他相关知识,我们将不胜感激
谢谢:)
最佳答案
如果找不到名称或 RGB 值,这里有一个方法:
static Color[] colors = typeof(Color)
.GetProperties(BindingFlags.Public | BindingFlags.Static)
.Where(pi => pi.CanRead && pi.PropertyType == typeof(Color))
.Select(pi => (Color)pi.GetValue(null, null))
.ToArray();
static IEnumerable<string> FindColorNames(string htmlColor)
{
// like "#RRGGBB" or "#AARRGGBB" or "Red" or "red"
var color = ColorTranslator.FromHtml(htmlColor);
return colors.Where(cc => cc.R == color.R
&& cc.G == color.G
&& cc.B == color.B
&& cc.A == color.A)
.Select(cc => cc.Name);
}
static string FindColorName(string htmlColor)
{
return FindColorNames(htmlColor).FirstOrDefault() ?? htmlColor;
}
// #FFFFFF: White
// #000000: Black
// #333333: 333333
// #FF00FF: Fuchsia (Magenta also matches)
使用更好搜索模式的更新:
static Dictionary<int, string[]> colors = static Color[] colors = typeof(Color)
.GetProperties(BindingFlags.Public | BindingFlags.Static)
.Where(pi => pi.CanRead && pi.PropertyType == typeof(Color))
.Select(pi => (Color)pi.GetValue(null, null))
.GroupBy(cc => cc.ToArgb())
.ToDictionary(gg => gg.Key, gg.Select(cc => cc.Name).ToArray());
static IEnumerable<string> FindColorNames(string htmlColor)
{
var color = ColorTranslator.FromHtml(htmlColor);
string[] names;
if (!colors.TryGetValue(color.ToArgb(), out names))
{
return Enumerable.Empty<string>();
}
return names;
}
static string FindColorName(string htmlColor)
{
return FindColorNames.FirstOrDefault() ?? htmlColor;
}
关于c# - 用于将颜色代码替换为颜色名称的脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8423874/