我搜索了一种将画笔的颜色保存为字符串的方法。例如,我有一个红色的画笔。现在我想在文本框中写“红色”。
谢谢你的帮助。
这是什么类型的刷子?如果它的绘图命名空间,那么画笔是一个抽象类。!对于 SolidBrush,请执行以下操作:
刷子.Color.ToString()
否则,获取颜色属性并使用 ToString() 方法将颜色转换为其字符串表示形式。
如果Brush
是使用Color
from创建的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"
或自己创建一个映射(并通过 a 查找颜色Dictionary
),可能使用周围的许多颜色表之一。
编辑:
您写了一条评论说您使用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);
I had a object of System.Drawing.Brush and the color information is not accessible. It couldn't be case to type color either. It is possible to cast this to SolidBrush where the color information is available. I was able to cast my Brush color
object to a SolidBrush and then pull the name from the color this way.
((SolidBrush)color).Color.Name