将XNA Color对象转换为字符串

我知道如何将字符串转换为XNA Color对象 ,但如何将Color.Blue类的C# Color对象转换为其字符串表示forms(例如“Blue”)。

您需要执行与上一个问题相反的操作:

  1. 从XNA颜色转换为系统颜色
  2. 尝试将系统颜色转换为已知颜色
  3. 如果转换有效,请使用已知颜色调用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属性获取其名称(如果有)。