Ответ 1
Вы можете сделать
Color c = Color.FromArgb(someInt);
а затем используйте c.R
, c.G
и c.B
для красных, зеленых и синих значений соответственно
Итак, сейчас у меня есть число от 0 до 2 ^ 24, и мне нужно сопоставить его с тремя значениями RGB. У меня возникли проблемы с тем, как бы я это сделал. Любая помощь приветствуется.
Вы можете сделать
Color c = Color.FromArgb(someInt);
а затем используйте c.R
, c.G
и c.B
для красных, зеленых и синих значений соответственно
В зависимости от того, какой цвет есть, вы можете использовать смещение битов, чтобы получить отдельные цвета следующим образом:
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
или ваш собственный класс цвета. Это зависит от приложения.
Вы можете использовать класс 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];
приведенный выше код работает решёткой. просто небольшая коррекция, нужно поменять местами b и r, как показано ниже.
byte r = values[0];
byte g = values[1];
byte b = values[2];