Вопрос

System.drawing.Color имеет метод TOARGB () для возврата представления INT о цвете.
В Silverlight, я думаю, что мы должны использовать System.Windows.media.Color. У него есть члены A, R, G, B, но нет метода для возврата одного значения.
Как я могу реализовать Toargb ()? В System.drawing.Color, Toargb () состоит из

return (int) this.Value;  

System.Windows.Media.Color имеет метод fromargb (байт a, байт r, байт g, byte b). Как мне разложить INT, возвращаемый 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);

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

Просто короткое заметку:

Извлечение целочисленного представления объекта «Цвета», кажется, в 4 раза быстрее для меня при вызове Color.toArgB () непосредственно вместо использования битовых операций в отмеченном ответе. Так что, если у вас есть доступ к .TOARGB (), всегда используйте это!

Thread Creator заявил, что он не доступа к нему, так что, конечно, отмеченный ответ все еще правильный, Juse не запутается в нее заявленные «быстрые операции».

Просто имейте в виду: цвет экземпляра цвета внутренне уже сохранен как значение int, поэтому Toargb () просто возвращает его при доступе к каждому одному байту (по свойствам .a, .r., .G., .B), а затем повторно ансамбль их битовой битой вроде движется по кругу.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top