【问题标题】:Convert A XNA Color object to a string将 XNA Color 对象转换为字符串
【发布时间】:2010-08-02 21:43:28
【问题描述】:

我知道如何convert a string to an XNA Color object,但是如何将 C# Color 对象(如 Color.Blue)转换为其字符串表示形式(例如“Blue”)。

【问题讨论】:

    标签: c# .net xna


    【解决方案1】:

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

    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 在这里所做的类似的方法:Convert string to Color in C#

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

    【讨论】:

    • 再次感谢本诺!我喜欢你的第一部分代码,但是,它总是会返回一个 0 作为结果字符串,即使我将 clrColor 设为常量,比如 Color.Green,colorName 仍然是“0”。不知道哪里出了问题..
    • 好消息是您没有做错任何事。坏消息是我给出的解决方案不起作用(到目前为止其他人也不会发布)。看起来只有在首先从已知颜色创建颜色时才能转换回已知颜色(使用 ToKnownColor)。
    • 对我来说听起来很难,哈哈,因为我没有反射经验,但我会尝试,谢谢,Bennor。
    • 如果您遇到问题,请告诉我,我今晚会尝试输入确切的代码。
    【解决方案2】:
    var color = System.Drawing.Color.Blue;
    var known = color.ToKnownColor();
    string name = known != null ? known.ToString() : "";
    

    【讨论】:

    • @Bennor:我还没有完成重要的 XNA 工作,但 System.Drawing.Color 和 System.Drawing.KnownColor 不可用吗?你自己的答案假设它是。
    • 是的,肯定可以访问它们,但您仍然需要从 XNA 颜色转换。
    • 在 XBox360 上你不能使用 System.Drawing,但根据他接受的第一个答案,我猜这是一个 Windows 应用程序。
    • 仅使用 XNA 对这两个问题的回答会完全不同。您必须使用 TypeConverter 方法(如果可用)或反射(链接问题中有一个很好的例子)。
    • 嗨,约翰,感谢您的输入。按照您的方法,我总是得到一个“0”作为结果字符串,您能建议一个原因吗?谢谢。
    【解决方案3】:

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

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

    然后你通过 Name 属性获得它的名字(如果有的话)。

    【讨论】:

    • 谢谢,但无论是什么颜色,仍然总是得到“0”。
    猜你喜欢
    • 2013-12-24
    • 2014-01-14
    • 2011-08-02
    • 2016-06-10
    相关资源
    最近更新 更多