Как я могу проверить если две Системы. Рисование. Цветовые структуры представляют то же, раскрашивают глубину цвета на 16 битов (или обычно на основе значения Экрана. PrimaryScreen. BitsPerPixel)?
Скажем, я установил Форму. TransparencyKey к Value1 (Типа цвета), я хочу проверить, что, когда пользователь выбирает новый цвет фона для формы (Value2), я не устанавливаю всю прозрачную форму.
На экранах глубины цвета на 32 бита я просто сравниваю два значения:
если (Value1 == Value2)
Однако это не работает над экранами глубины цвета на 16 битов, так же больше Значений цвета для Value2 представило бы тот же фактический цвет на 16 битов как Value1, как я узнал твердый путь.
Попробуйте следующий код:
void MyTestMethod() {
TransparencyKey = Color.FromArgb(128, 128, 64);
BackColor = Color.FromArgb(128, 128, 71);
byte tR = ConvertR(TransparencyKey.R);
byte tG = ConvertG(TransparencyKey.G);
byte tB = ConvertB(TransparencyKey.B);
byte bR = ConvertR(BackColor.R);
byte bG = ConvertG(BackColor.G);
byte bB = ConvertB(BackColor.B);
if (tR == bR &&
tG == bG &&
tB == bB) {
MessageBox.Show("Equal: " + tR + "," + tG + "," + tB + "\r\n" +
bR + "," + bG + "," + bB);
}
else {
MessageBox.Show("NOT Equal: " + tR + "," + tG + "," + tB + "\r\n" +
bR + "," + bG + "," + bB);
}
}
byte ConvertR(byte colorByte) {
return (byte)(((double)colorByte / 256.0) * 32.0);
}
byte ConvertG(byte colorByte) {
return (byte)(((double)colorByte / 256.0) * 64.0);
}
byte ConvertB(byte colorByte) {
return (byte)(((double)colorByte / 256.0) * 32.0);
}
Просто поиграйте с TransparancyKey и BackColor, чтобы узнать, работает ли он на вас. Для меня сработало. И да, я знаю, что это раздутый и уродливый код, он, конечно же, предназначен для примера.
Есть два формата пикселей для 16-битного цвета: 555 и 565. Вам придется замаскировать значения R, G и B с помощью 0xf8 (5 бит) и 0xfc (6 бит) перед их сравнением. Помните, что машина, на которой вы запускаете конструктор, не является репрезентативной для машины, на которой работает ваша программа.
Поскольку под капотом используется Colortranslator.towin32, используют эту работу?
if( ColorTranslator.ToWin32(Value1) == ColorTranslator.ToWin32(Value2) )