C#刷到字符串
我搜索一种方法来将画笔的颜色保存为字符串。 例如,我有一个红色的画笔。 现在我想在文本框中写“红色”。
谢谢你的帮助。
如果使用System.Drawing.Color
的Color
创建了Brush
,则可以使用Color
的Name
属性。
否则,您可以尝试使用reflection查找颜色
// 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
查看颜色),可能使用周围的许多颜色表中的一个 。
编辑:
您写了一条评论说您使用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 == bR && value.G == bG && value.B == bB && value.A == bA select p.Name).DefaultIfEmpty("unknown").First();
这是什么类型的刷子? 如果是绘图命名空间,那么brush是一个抽象类。 对于SolidBrush,请执行以下操作:
brush.Color.ToString()
否则,获取color属性并使用ToString()方法将颜色转换为其字符串表示forms。
基本上我会发布已经回答的内容。
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);
原始答案: 在C#中将字符串转换为画笔/画笔颜色名称