【问题标题】:Converting hexadecimal color to integer将十六进制颜色转换为整数
【发布时间】:2013-08-08 22:41:38
【问题描述】:

这是我在数据库中的整数颜色:“8689404”。

我将其更改为颜色如下:

Color = ColorHelper.FromArgb(255,
        byte.Parse(Event.LABELCOLOR.Value.ToString("X8").Substring(6, 2), NumberStyles.HexNumber),
        byte.Parse(Event.LABELCOLOR.Value.ToString("X8").Substring(4, 2), NumberStyles.HexNumber),
        byte.Parse(Event.LABELCOLOR.Value.ToString("X8").Substring(2, 2), NumberStyles.HexNumber))

这给了我颜色字符串“#FFFC9684”

现在的问题是我无法将此颜色字符串解析回整数,因此我可以将其保存在数据库中。 我还没有:

byte A = byte.Parse(labelcolor.Color.TrimStart('#').Substring(0, 2), System.Globalization.NumberStyles.HexNumber);
byte B = byte.Parse(labelcolor.Color.TrimStart('#').Substring(6, 2), System.Globalization.NumberStyles.HexNumber);
byte G = byte.Parse(labelcolor.Color.TrimStart('#').Substring(4, 2), System.Globalization.NumberStyles.HexNumber);
byte R = byte.Parse(labelcolor.Color.TrimStart('#').Substring(2, 2), System.Globalization.NumberStyles.HexNumber);

这给了我:

A = 255
B = 132
G = 150
R = 252

这些值是正确的,但我无法将它们与“8689404”进行比较

根据我的发现:

B = 132 = 84 
G = 150 = 96
R = 252 = FC
A = 255 = FF

这就是我所拥有的,我怎么能有这个颜色字符串的整数。我在 WinRT 中工作。任何帮助!提前致谢

【问题讨论】:

    标签: c# colors winrt-xaml argb


    【解决方案1】:

    这将产生您想要的正确十进制值:

    int decValue = int.Parse("8496FC", System.Globalization.NumberStyles.HexNumber);
    

    如您所见,用于生成十进制值的十六进制值由以下颜色分量组成:

    B(84)G(96)R(FC)

    A 组件被丢弃。

    这可以通过在完整的十六进制颜色上使用substring 来计算,如下所示:

    string colour = labelcolor.Color.TrimStart('#');
    string R = colour.Substring(2, 2);
    string G = colour.Substring(4, 2);
    string B = colour.Substring(6, 2);
    

    然后你可以像这样使用它:

    int decValue = int.Parse(B + G + R, System.Globalization.NumberStyles.HexNumber);
    //decValue = 8689404
    

    Here is a working example

    【讨论】:

      【解决方案2】:

      您可以使用类似下面的函数或将其作为 System.Drawing.Color 的扩展方法:

      void Main()
      {
          int intColor = 8689404;
          var c = Color.FromArgb(255, Color.FromArgb(intColor));
      
          IsEqual(c, intColor);    //prints True
      }
      
      //Assumes A = 255
      bool IsEqual(Color c, int i)
      {
          int j = (int)(c.ToArgb() & 0x00FFFFFF);
          return i == j;
      }
      

      如果你做了一个扩展方法,你可能希望为方法选择一个更好的名字。

      【讨论】:

      • 你说得对,但正如我提到的我在 WinRT 中工作,System.Drawing 不可用
      猜你喜欢
      • 2019-10-29
      • 2011-10-19
      • 1970-01-01
      • 2020-08-06
      • 2010-10-16
      • 1970-01-01
      • 2017-10-30
      相关资源
      最近更新 更多