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

C# 将XNA颜色对象转换为字符串,c#,.net,xna,C#,.net,Xna,我知道如何将C#Color对象(如Color.Blue)转换为其字符串表示形式(例如“Blue”)。您需要首先将Microsoft.Xna.Framework.Graphics.Color转换为System.Drawing.Color var color = System.Drawing.Color.FromArgb(a,r,g,b); 然后通过name属性获取其名称(如果有)。您需要执行与上一个问题相反的操作: 从XNA颜色转换为系统颜色 尝试将系统颜色转换为已知颜色 如果转换成功,请调用已

我知道如何将C#
Color
对象(如
Color.Blue
)转换为其字符串表示形式(例如“Blue”)。

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

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

然后通过name属性获取其名称(如果有)。

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

  • 从XNA颜色转换为系统颜色
  • 尝试将系统颜色转换为已知颜色
  • 如果转换成功,请调用已知颜色的ToString
  • e、 g

    注意:如果颜色名称未知,这将为您提供一个空字符串

    [编辑] 您可能想在这里尝试使用类型转换器。我不确定XNA颜色类型是否存在,但值得一试:

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

    由于上述任何一项都不能满足您的要求,因此您必须尝试与Jon在这里所做的类似的方法:


    您需要使用反射将所有XNA颜色拉入字典,就像他所做的那样,但是反转键和值,因此这是字典,然后编写一个函数,通过颜色参数访问字典并返回名称。

    @Bennor:我没有做过重要的XNA工作,但是System.Drawing.Color和System.Drawing.KnownColor难道不可用吗?你自己的答案是这样的。是的,当然可以访问它们,但你仍然需要从XNA颜色转换。在XBox360上,你不能使用System.Drawing,但根据他接受的第一个答案,我猜这是一个Windows应用程序。仅使用XNA,这两个问题的答案会大不相同。您必须使用TypeConverter方法(如果可用)或反射(链接问题中有一个很好的例子)。嗨,John,谢谢您的输入。按照您的方法,我总是得到一个“0”作为结果字符串,您能提出一个原因吗?谢谢。再次感谢Bennor!我喜欢你的第一部分代码,但是,它总是会返回一个0作为结果字符串,即使我将clrColor作为常量,比如说,like Color.Green,colorName仍然是一个“0”。不知道哪里出错了。好消息是你没有做错任何事。坏消息是,我给出的解决方案不起作用(到目前为止其他人也不起作用)。看起来只有在从已知颜色创建颜色时才可能转换回已知颜色(使用ToKnownColor)。对我来说听起来很难,哈哈,因为我没有反射方面的经验,但我会尝试,谢谢,Bennor。如果有问题,请告诉我,我今晚会尝试输入准确的代码。谢谢,但无论是什么颜色,始终会得到“0”。
    // 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() : "";
    
    string colorName = System.ComponentModel.TypeDescriptor.GetConverter(typeof(Microsoft.Xna.Framework.Graphics.Color)).ConvertToString(yourXnaColor);