2010-12-17 8 views
0

色の名前を取得する方法はありますか?色はS​​ystem.Windows.Media.Colorで、探している名前はSystem.Windows.Media.Colorsモジュールのプロパティとして定義されています。WPF/Silverlight:色の名前を見つける

+1

を意味しますかRGB値を提供し、名前付きカラー(存在する場合)を取得しますか? –

+0

それはまさに私が欲しいものです。 –

答えて

4

この拡張メソッドを試してみてください。

static class ColorHelpers 
{ 

    public static string GetColorName(this Color color) 
    { 
     return _knownColors 
      .Where(kvp => kvp.Value.Equals(color)) 
      .Select(kvp => kvp.Key) 
      .FirstOrDefault(); 
    } 

    static readonly Dictionary<string, Color> _knownColors = GetKnownColors(); 

    static Dictionary<string, Color> GetKnownColors() 
    { 
     var colorProperties = typeof(Colors).GetProperties(BindingFlags.Static | BindingFlags.Public); 
     return colorProperties 
      .ToDictionary(
       p => p.Name, 
       p => (Color)p.GetValue(null, null)); 
    } 

用途:

Color c = ...; 
string name = c.GetColorName(); 

EDIT:これは大体Meleakの答えと同じですが、反射のみ行われるので、それはより速くする必要があります一度...

0

Dictionを入力するThomas Levesqueからの修正された回答進ときだけで代わりに起動時のコストを取るのに必要な第一、(ユーザーがカメのペンの色を変更することが知られている色の名前を発音することができるように、音声認識・ドリブンタートルグラフィックスで使用する予定)

//Project: SpeechTurtle (http://SpeechTurtle.codeplex.com) 
//Filename: ColorUtils.cs 
//Version: 20150901 

using System.Collections.Generic; 
using System.Linq; 
using System.Reflection; 
using System.Windows.Media; 

namespace SpeechTurtle.Utils 
{ 
    /// <summary> 
    /// Color-related utility methods 
    /// </summary> 
    public static class ColorUtils //based on http://stackoverflow.com/questions/4475391/wpf-silverlight-find-the-name-of-a-color 
    { 
    #region --- Fields --- 

    private static Dictionary<string, Color> knownColors; //=null 

    #endregion 

    #region --- Methods --- 

    #region Extension methods 

    public static string GetKnownColorName(this Color color) 
    { 
     return GetKnownColors() 
      .Where(kvp => kvp.Value.Equals(color)) 
      .Select(kvp => kvp.Key) 
      .FirstOrDefault(); 
    } 

    public static Color GetKnownColor(this string name) 
    { 
     Color color; 
     return GetKnownColors().TryGetValue(name, out color) ? color : Colors.Black; //if color for name is not found, return black 
    } 

    #endregion 

    public static Dictionary<string, Color> GetKnownColors() 
    { 
     if (knownColors == null) 
     { 
     var colorProperties = typeof(Colors).GetProperties(BindingFlags.Static | BindingFlags.Public); 
     knownColors = colorProperties.ToDictionary(
      p => p.Name, 
      p => (Color)p.GetValue(null, null)); 
     } 
     return knownColors; 
    } 

    public static string[] GetKnownColorNames() 
    { 
     return GetKnownColors().Keys.ToArray(); 
    } 

    #endregion 
    } 
} 
関連する問題