筆の色を文字列として保存する方法を探しています。たとえば、私は赤い色のブラシを持っています。ここで、テキストボックスに「赤」と書きたいと思います。
助けてくれてありがとう。
これはどんな種類のブラシですか?その描画名前空間の場合、brushは抽象クラスです。SolidBrushの場合、次のようにします。
Brush.Color.ToString()
それ以外の場合は、colorプロパティを取得し、ToString()メソッドを使用して色を文字列表現に変換します。
fromBrush
を使用して作成された場合は、 'sプロパティを使用できます。Color
System.Drawing.Color
Color
Name
それ以外の場合は、反射を使用して色を調べてみることができます
// hack
var b = new SolidBrush(System.Drawing.Color.FromArgb(255, 255, 235, 205));
var colorname = (from p in typeof(System.Drawing.Color).GetProperties()
where p.PropertyType.Equals(typeof(System.Drawing.Color))
let value = (System.Drawing.Color)p.GetValue(null, null)
where value.R == b.Color.R &&
value.G == b.Color.G &&
value.B == b.Color.B &&
value.A == b.Color.A
select p.Name).DefaultIfEmpty("unknown").First();
// colorname == "BlanchedAlmond"
または、自分でマッピングを作成し(そして、を介して色を調べますDictionary
)、おそらく周りの多くのカラーテーブルの1つを使用します。
編集:
を使用しているというコメントを書きましたがSystem.Windows.Media.Color
、それでもSystem.Drawing.Color
色の名前を検索するために使用できます。
var b = System.Windows.Media.Color.FromArgb(255, 255, 235, 205);
var colorname = (from p in typeof(System.Drawing.Color).GetProperties()
where p.PropertyType.Equals(typeof(System.Drawing.Color))
let value = (System.Drawing.Color)p.GetValue(null, null)
where value.R == b.R &&
value.G == b.G &&
value.B == b.B &&
value.A == b.A
select p.Name).DefaultIfEmpty("unknown").First();
基本的には、すでに回答済みのものを投稿します。
string color = textBox1.Text;
// best, using Color's static method
Color red1 = Color.FromName(color);
// using a ColorConverter
TypeConverter tc1 = TypeDescriptor.GetConverter(typeof(Color)); // ..or..
TypeConverter tc2 = new ColorConverter();
Color red2 = (Color)tc.ConvertFromString(color);
// using Reflection on Color or Brush
Color red3 = (Color)typeof(Color).GetProperty(color).GetValue(null, null);
// in WPF you can use a BrushConverter
SolidColorBrush redBrush = (SolidColorBrush)new BrushConverter().ConvertFromString(color);
System.Drawing.Brushのオブジェクトがあり、色情報にアクセスできません。色を入力することもできませんでした。これを、色情報が利用可能なSolidBrushにキャストすることができます。Brush color
オブジェクトをSolidBrushにキャストしてから、この方法で色から名前を引き出すことができました。
((SolidBrush)color).Color.Name