【问题标题】:Mapping an Integer to an RGB color in C#在 C# 中将整数映射到 RGB 颜色
【发布时间】:2011-09-02 03:39:02
【问题描述】:

所以现在我有一个介于 0 和 2^24 之间的数字,我需要将它映射到三个 RGB 值。我在如何实现这一点上遇到了一些麻烦。感谢您提供任何帮助。

【问题讨论】:

  • 你的号码是0x00RRGGBB(十六进制)吗?

标签: c# mapping rgb


【解决方案1】:

你可以的

Color c = Color.FromArgb(someInt);

然后将c.Rc.Gc.B 分别用于红色、绿色和蓝色值

【讨论】:

  • 哈,我可以发誓我已经尝试过了。我想是人为错误。感谢您的帮助。
【解决方案2】:

根据颜色的位置,您可以使用位移来获取单个颜色,如下所示:

int rgb = 0x010203;
var color = Color.FromArgb((rgb >> 16) & 0xff, (rgb >> 8) & 0xff, (rgb >> 0) & 0xff);

上面的表达式假设0x00RRGGBB,但你的颜色可能是0x00BBGGRR,在这种情况下只需改变16, 8, 0的值。

这也使用System.Drawing.Color 而不是System.Windows.Media.Color 或您自己的颜色类。这取决于应用程序。

【讨论】:

    【解决方案3】:

    您可以使用 BitConverter 类从 int 中获取字节:

    byte[] values = BitConverter.GetBytes(number);
    if (!BitConverter.IsLittleEndian) Array.Reverse(values);
    

    数组将有四个字节。前三个字节包含您的号码:

    byte b = values[0];
    byte g = values[1];
    byte r = values[2];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-04-06
      • 2018-06-21
      • 1970-01-01
      • 2016-02-01
      • 2015-10-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多