2010-08-02 47 views

回答

3

你需要做的是什么在你前面的问题做了相反的:

  1. 转换从XNA颜色系统颜色
  2. 尝试和转换系统颜色为已知的颜色
  3. 如果转换工作,在已知颜色上调用ToString

eg

// 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颜色类型,但它是值得一试:

string colorName = System.ComponentModel.TypeDescriptor.GetConverter(typeof(Microsoft.Xna.Framework.Graphics.Color)).ConvertToString(yourXnaColor); 

[编辑]

由于没有以上会做你想要什么,你必须尝试类似的方法来处理Jon在这里所做的:Convert string to Color in C#

您需要使用反射将所有XNA颜色拖入字典中,就像他所做的那样,但是反转键和值,所以它是字典,然后编写一个函数,该函数使用Color参数访问字典并返回名称。

+0

再次感谢Bennor! 我喜欢你的第一部分代码,但是,它总是会返回一个0作为结果字符串,即使我将clrColor作为一个常量,比如Color.Green,颜色名称仍然是“0”。不知道哪里出了问题.. – Kevin 2010-08-02 22:44:31

+1

好消息是你没有做错任何事情。坏消息是我提供的解决方案不起作用(其他人也不会发布到目前为止)。它看起来像只有当转换为已知颜色(使用ToKnownColor)时才可以转换回来,而颜色首先是从已知颜色创建的。 – 2010-08-02 23:06:40

+0

听起来很难对我,大声笑,因为我没有经验的反思,但我会尝试,谢谢,本诺尔。 – Kevin 2010-08-02 23:42:38

3
var color = System.Drawing.Color.Blue; 
var known = color.ToKnownColor(); 
string name = known != null ? known.ToString() : ""; 
+2

他在说XNA。 – 2010-08-02 21:51:33

+0

@Bennor:我没有做过重大的XNA工作,但是没有System.Drawing.Color和System.Drawing.KnownColor可用?你自己的答案假定它是。 – 2010-08-02 22:09:24

+0

是的,他们肯定有访问权限,但你仍然需要从XNA颜色转换。 – 2010-08-02 22:13:12

1

您需要先将Microsoft.Xna.Framework.Graphics.Color转换为System.Drawing.Color。

var color = System.Drawing.Color.FromArgb(a,r,g,b); 

然后你得到它的名字(如果它有一个)Name属性。

+0

谢谢,但无论是什么颜色,仍然总是得到“0”。 – Kevin 2010-08-02 22:55:04