【发布时间】:2010-08-02 21:43:28
【问题描述】:
我知道如何convert a string to an XNA Color object,但是如何将 C# Color 对象(如 Color.Blue)转换为其字符串表示形式(例如“Blue”)。
【问题讨论】:
我知道如何convert a string to an XNA Color object,但是如何将 C# Color 对象(如 Color.Blue)转换为其字符串表示形式(例如“Blue”)。
【问题讨论】:
您需要做与上一个问题相反的操作:
例如
// 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 在这里所做的类似的方法:Convert string to Color in C#
您需要使用反射将所有 XNA 颜色提取到字典中,就像他所做的那样,但是反转键和值,所以它是字典,然后编写一个函数来访问字典,获取颜色参数并返回名字。
【讨论】:
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 属性获得它的名字(如果有的话)。
【讨论】: