Система. Рисование. Цвет имеет ToArgb () метод для возврата Международного представления цвета.
В Silverlight я думаю, что мы должны использовать Систему. Windows. Медиа. Цвет. Это имеет A, R, G, B участники, но никакой метод для возвращения единственного значения.
Как я могу реализовать ToArgb ()? В Системе. Рисунок. Цвет, ToArgb () состоит из
return (int) this.Value;
Система. Windows. Медиа. Цвет имеет FromArgb (байт A, байт R, байт G, байт B) метод. Как я разлагаюсь, Интервал возвратился ToArgb () для использования с FromArgb ()?
Спасибо за любые указатели...
Коротко и быстро. Без лишнего вызова метода, но с быстрыми операциями.
// 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));
Похоже, вы задаете два вопроса, позвольте мне нанести еще один удар. Тем не менее, вы захотите изучить использование класса 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);
Надеюсь, это поможет.