【问题标题】:How to store Colors in string?如何将颜色存储在字符串中?
【发布时间】:2012-01-12 09:59:29
【问题描述】:

如果它们是人类可读格式,我想将 Color 存储在字符串中,如果不是,我想将它们存储在 ToArgb() 中。

颜色为红色,然后将其存储在“红色”字符串中,如果颜色是绿色的某种变体,则将其存储为“ff40ff80”。

在运行时我想将此字符串转换回颜色类对象?

【问题讨论】:

    标签: c# .net string colors rgb


    【解决方案1】:
    Color color = Color.Red;
    string colorName = color.Name; // this gives you the ability to switch back to Color through Color.FromName()
    Color sameColor = Color.FromName(colorName);
    

    【讨论】:

      【解决方案2】:

      你很幸运。 Color.ToString() 方法将为您执行此操作:

      返回值

      输入:System.String

      如果该颜色是使用FromName 方法或FromKnownColor 方法从预定义颜色创建的,则该颜色的名称为字符串;否则,一个由 ARGB 组件名称及其值组成的字符串。

      【讨论】:

      • System.String 解析回System.Drawing.Color 可以使用System.Drawing.ColorTranslator.FromHtml 完成(不需要使用.ToString() 你也可以使用System.Drawing.ColorTranslator.ToHtml
      【解决方案3】:

      就像 Cody Gray 已经说过的,从颜色中获取信息非常简单。问题是让它恢复颜色。

      所以也许这会给你一些起点。它没有经过测试,但您是否应该就如何解决它提供一些想法。

      public Color FromString(string name)
      {
          if(String.IsNullOrWhitespace(name))
          {
              throw new ArgumentException("name");
          }
      
          KnownColor knownColor;
      
          if(Enum.TryParse(name, out knownColor))
          {
              return Color.FromKnownColor(knownColor);
          }
      
          return ColorTranslator.FromHtml(name);
      }
      

      我只记得有几个问题,取决于颜色是如何写成字符串的。对于每个在框架中都存在一些类,但它们在命名空间周围被分割(如ColorTranslator)。

      请注意,如果您只是调用 Color.FromName(Color.FromArgb(3,4,5,6).ToString()),您会得到一个带有名称的颜色,但 argb 值全为零!

      【讨论】:

        【解决方案4】:

        我发现提到的解决方案在从 Color 到 string 并返回到 Color 时效果不佳。它们取决于颜色是否是预定义的并有名称。以下代码对我有用。

        从颜色到字符串:

        string ConvertColorToString(Color color)
        {
            return Convert.ToString(color.ToArgb())
        }
        

        从字符串到颜色:

        Color ConvertStringToColor(string s)
        {
            return Color.FromArgb(Convert.ToInt32(s))
        }
        

        通过将颜色转换为 32 位 ARGB 整数表示,颜色语义在转换过程中得以保留。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-04-03
          • 1970-01-01
          • 1970-01-01
          • 2022-07-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-09-23
          相关资源
          最近更新 更多