Реализация ToArgb ()

Система. Рисование. Цвет имеет ToArgb () метод для возврата Международного представления цвета.
В Silverlight я думаю, что мы должны использовать Систему. Windows. Медиа. Цвет. Это имеет A, R, G, B участники, но никакой метод для возвращения единственного значения.
Как я могу реализовать ToArgb ()? В Системе. Рисунок. Цвет, ToArgb () состоит из

return (int) this.Value;  

Система. Windows. Медиа. Цвет имеет FromArgb (байт A, байт R, байт G, байт B) метод. Как я разлагаюсь, Интервал возвратился ToArgb () для использования с FromArgb ()?

Спасибо за любые указатели...

10
задан Donut 22 April 2010 в 16:11
поделиться

2 ответа

Коротко и быстро. Без лишнего вызова метода, но с быстрыми операциями.

// To integer
int iCol = (color.A << 24) | (color.R << 16) | (color.G << 8) | color.B;

// From integer
Color color = Color.FromArgb((byte)(iCol >> 24), 
                             (byte)(iCol >> 16), 
                             (byte)(iCol >> 8), 
                             (byte)(iCol));
32
ответ дан 3 December 2019 в 14:00
поделиться

Похоже, вы задаете два вопроса, позвольте мне нанести еще один удар. Тем не менее, вы захотите изучить использование класса BitConverter .

Из на этой странице :

Порядок байтов для 32-битного значения ARGB - AARRGGBB.

Итак, чтобы реализовать ToArgb () , вы можете написать метод расширения , который делает что-то вроде этого:

public static int ToArgb(this System.Windows.Media.Color color)
{
   byte[] bytes = new byte[] { color.A, color.R, color.G, color.B };
   return BitConverter.ToInt32(bytes, 0);
}

И «разложить Int, возвращаемый ToArgb (), на использовать с FromArgb () ", вы можете сделать это:

byte[] bytes = BitConverter.GetBytes(myColor.ToArgb());
byte aVal = bytes[0];
byte rVal = bytes[1];
byte gVal = bytes[2];
byte bVal = bytes[3];  

Color myNewColor = Color.FromArgb(aVal, rVal, gVal, bVal);

Надеюсь, это поможет.

5
ответ дан 3 December 2019 в 14:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: