Вопрос

Как я могу проверить.

Допустим, я установил 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) )
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top