将XNA Color对象转换为字符串
我知道如何将字符串转换为XNA Color
对象 ,但如何将Color.Blue
类的C# Color
对象转换为其字符串表示forms(例如“Blue”)。
您需要执行与上一个问题相反的操作:
- 从XNA颜色转换为系统颜色
- 尝试将系统颜色转换为已知颜色
- 如果转换有效,请使用已知颜色调用ToString
例如
// Borrowed from previous question using XnaColor = Microsoft.Xna.Framework.Graphics.Color; System.Drawing.Color clrColor = System.Drawing.Color.FromName("Red"); XnaColor xnaColor = new XnaColor(clrColor.R, clrColor.G, clrColor.B, clrColor.A); // Working back the other way System.Drawing.Color newClrColor = System.Drawing.Color.FromArgb(xnaColor.A, xnaColor.R, xnaColor.G, xnaColor.B); System.Drawing.KnownColor kColor = newClrColor.ToKnownColor(); string colorName = kColor != 0 ? kColor.ToString() : "";
注意:如果颜色名称未知,这将为您提供一个空字符串。
[编辑]你可能想尝试在这里使用TypeConverter。 我不确定XNA Color类型是否存在,但它值得一试:
string colorName = System.ComponentModel.TypeDescriptor.GetConverter(typeof(Microsoft.Xna.Framework.Graphics.Color)).ConvertToString(yourXnaColor);
[编辑]
由于以上都不会做你想要的,你必须尝试类似于Jon在这里做的方法: 在C#中将字符串转换为Color
您需要使用reflection将所有XNA颜色拉入字典,就像他已经完成的那样,但是反转键和值,所以它是Dictionary,然后编写一个函数来访问字典,获取Color参数并返回名称。
var color = System.Drawing.Color.Blue; var known = color.ToKnownColor(); string name = known != null ? known.ToString() : "";
您需要先将Microsoft.Xna.Framework.Graphics.Color转换为System.Drawing.Color。
var color = System.Drawing.Color.FromArgb(a,r,g,b);
然后使用Name属性获取其名称(如果有)。