如何检查两个System.Drawing.Color结构是否以16位色深(或通常基于Screen.PrimaryScreen.BitsPerPixel的值)表示相同的颜色?
假设我将Form.TransparencyKey设置为Value1(颜色类型),我想检查的是,当用户为表单(Value2)选择新的背景色时,我没有将整个表单设置为透明。
在32位色深屏幕上,我只是比较两个值:
如果(值1 ==值2)
但是,这在16位色深的屏幕上不起作用,因为Value2的更多Color值将表示与Value1相同的实际16位色,如我所知。
最佳答案
尝试以下代码:
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看看它是否适合您。对我来说确实如此。是的,我知道这是s肿且丑陋的代码,当然,这只是作为示例。