将XNA颜色对象转换为字符串

4
3个回答

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

@Bennor:我没有做过太多的XNA工作,但是System.Drawing.Color和System.Drawing.KnownColor不是可用的吗?你自己的答案假设它是可用的。 - John Fisher
是的,它们肯定可以被访问,但你仍然需要从XNA颜色进行转换。 - Bennor McCarthy
在XBox360上,您无法使用System.Drawing,但根据他接受的第一个答案,我猜测这是一个Windows应用程序。 - Struan
使用XNA的话,这两个问题的答案会完全不同。你必须使用TypeConverter方法(如果可用),或者Reflection(链接问题中有一个很好的例子)。 - Bennor McCarthy
嗨John,谢谢您的意见。按照您的方法,我总是得到一个“0”作为结果字符串,请问您能否提供一个原因?谢谢。 - Kevin
你确定你要转换的颜色与你期望的已知颜色的RGBA值完全匹配吗? - John Fisher

3

您需要做的是与之前问题相反:

  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#中的颜色

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


再次感谢Bennor!我喜欢你的第一部分代码,但是它总是返回0作为结果字符串,即使我将clrColor设置为常量,比如Color.Green,colorName仍然是“0”。不知道哪里出了问题... - Kevin
1
好消息是你没有做错任何事。坏消息是我给出的解决方案不起作用(到目前为止,其他人发布的也不行)。看起来只有在颜色最初是从已知颜色创建时,才可能转换回一个已知颜色(通过ToKnownColor)。 - Bennor McCarthy
听起来对我来说有点困难,哈哈,因为我没有反射的经验,但我会尝试的,谢谢,Bennor。 - Kevin
1
如果你有问题,请告诉我,今晚我会尽力放上确切的代码。 - Bennor McCarthy

1

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

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

然后您可以使用Name属性获取其名称(如果有的话)。


谢谢,但是无论颜色是什么,我仍然得到“0”。 - Kevin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接