Как проверить, только ли две системы.
-
25-09-2019 - |
Вопрос
Как я могу проверить.
Допустим, я установил form.transparencykekey to Value1 (из типа цвета), я хочу проверить, что когда пользователь выбирает новый цвет фона для формы (значение2), я не устанавливаю всю форму прозрачной.
На экранах глубины цвета 32-битна я просто сравниваю два значения:
Если (значение1 == значение2)
Однако это не работает на 16-битных экранах глубины цвета, так как больше цветовых значений для значения2 будет представлять собой тот же фактический 16-битный цвет, что и значение CONTECT1, так как я обнаружил трудный путь.
Решение
Попробуйте следующий код:
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);
}
Просто скрись с TransparancyCey и Backcolor, чтобы увидеть, работает ли это для вас. Для меня это сделало. И да, я знаю, что это раздутый и уродливый код, он просто предназначен, что и пример конечно.
Другие советы
Существует два формата пикселей для 16-битного цвета, 555 и 565. Вам нужно было замаскировать значения R, G и B с 0xF8 (5 битами) и 0xFC (6 битами), прежде чем сравнивать их. Имейте в виду, что машина, на которой вы управляете дизайнером, не является представителем для машины, на которой работает ваша программа.
Поскольку colortranslator.towin32 используется под капотом, работает ли эта работа?
if( ColorTranslator.ToWin32(Value1) == ColorTranslator.ToWin32(Value2) )