разбить ARGB на байтовые значения - PullRequest
8 голосов
/ 25 августа 2009

У меня есть значение ARGB, хранящееся как тип int. Он был сохранен путем вызова ToArgb.

Теперь я хочу получить значения байтов отдельных цветовых каналов из значения int.

например

int mycolor = -16744448;
byte r,g,b,a;

GetBytesFromColor(mycolor,out a, out r, out g, out b);

Как бы вы реализовали GetBytesFromColor?

Чтобы дать контекст, я передаю значение цвета, сохраненное в db, как int, приложению silverlight, которому нужны отдельные байтовые значения для создания цветового объекта.

System.Windows.Media.Color.FromArgb(byte a, byte r, byte g, byte b)

Ответы [ 2 ]

13 голосов
/ 25 августа 2009

Вы после 4 последовательных 8-битных блоков из 32-битного целого числа; Итак, сочетание маскировки и смещения:

b = (byte)(myColor & 0xFF);
g = (byte)((myColor >> 8) & 0xFF);
r = (byte)((myColor >> 16) & 0xFF);
a = (byte)((myColor >> 24) & 0xFF);
1 голос
/ 25 августа 2009
public void GetBytesFromColor(int color, out a, out r, out g, out b)
{
    Color c = Color.FromArgb(color);
    a = c.A;
    r = c.R;
    g = c.G;
    b = c.B;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...