2011-12-07 152 views
2

有沒有人知道將顏色代碼更改爲顏色名稱的方法?我有一個XML與顏色代碼: 我需要:#FFFFFF更換到White#000000Black將顏色代碼替換爲顏色名稱的腳本?

如果你知道一個腳本,批處理,C#程序,還是要到這一點,生病是極大的讚賞

謝謝:)

+0

爲什麼你想要?你能在這裏提供一些背景嗎? – dougajmcdonald

+0

我想你必須自己創建腳本,這張表可能會有幫助 - http://www.w3schools.com/html/html_colorvalues.asp –

回答

4

這裏,如果沒有被發現,這將檢索名稱或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; 
} 
+0

+1,這就是我想要的。 .. –

+0

@JeremyThompson:切換到「ColorTranslator」,根據您的答案進行轉換。謝謝! – user7116

2

這有點吮吸,並可能會給一些意想不到的價值,但在技術上是正確的。隨時與自己的顏色名稱列表更新:

public string GetColorName(int r, int g, int b) 
    { 
     return GetColorName(Color.FromArgb(r, g, b)); 
    } 

    public string GetColorName(Color color) 
    { 
     foreach (var knownColorName in Enum.GetNames(typeof(KnownColor))) 
     { 
      var knownColor = Color.FromName(knownColorName); 
      if (knownColor.R == color.R && knownColor.G == color.G && knownColor.B == color.B) 
      { 
       return knownColorName; 
      } 
     } 
     return color.Name; 
    } 
0
System.Drawing.ColorTranslator.FromHtml("#FFFFFF") 


Color.FromArgb(255, 255, 255, 255).ToArgb() == Color.White.ToArgb() 
+2

給出:'ffffffff' – user7116