【问题标题】:Convert integer to color in WPF在 WPF 中将整数转换为颜色
【发布时间】:2014-02-10 10:44:35
【问题描述】:

如何在 WPF 中将整数转换为颜色? 例如,我想将 16711935 转换为颜色。

如何在 Windows 窗体中的 WPF 中执行以下操作?

myControl.Background = Color.FromArgb(myColorInt);

【问题讨论】:

  • @GrantWinney WPF Color.FromArgb 需要 4 个参数,即字节 a、字节 r、字节 g、字节 b。

标签: c# .net wpf colors


【解决方案1】:

System.Windows.Media.Color 结构具有类似的方法,但它们具有 Byte 类型的参数。您可以使用 BitConverter 类在 Bytes 数组和 Int32 之间进行转换。

【讨论】:

    【解决方案2】:

    你想使用System.Drawing.Color,而不是System.Windows.Media.Color

    var myColor = System.Drawing.Color.FromArgb(16711935);
    

    Ooookay,不确定这是否非常漂亮,但您可以从一个 Color 类转换为另一个类,然后在 SolidColorBrush ctor 中使用它:

    myControl.Background = new SolidColorBrush(
      System.Windows.Media.Color.FromArgb(myColor.A,myColor.R,myColor.G,myColor.B));
    

    【讨论】:

    • 我已经编辑了这个问题。上面给出了“无法将“system.drawing.color”隐式转换为“System.windows.Media.Brush”的错误。
    • 很好的解决方案。至少对我来说,一目了然地了解正在发生的事情,而不是使用字节数组接受的答案。
    【解决方案3】:

    使用BitConverter 类将您的值转换为字节数组,这样您就不需要导入另一个命名空间。

    byte[] bytes = BitConverter.GetBytes(16711935);
    this.Background = new SolidColorBrush( Color.FromArgb(bytes[3],bytes[2],bytes[1],bytes[0]));
    

    【讨论】:

    • @优秀的答案。谢谢。
    • 这样做的好方法。但是请注意,如果整数按该顺序包含 argb 值 - alpha 占据最左边的位,那么您可能需要 Color.FromArgb 的参数反过来... Color.FromArgb(bytes[3],bytes[2] ,字节[1],字节[0])
    • 很好的答案,但正如 Simon 所说,如果您要转换 System.Drawing.Color.ToArgb 方法输出的 int,字节确实需要反转。
    • @Simon 你是对的,刚刚验证了自己并编辑了马克的答案
    猜你喜欢
    • 2013-06-15
    • 1970-01-01
    • 2013-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-14
    相关资源
    最近更新 更多