试试下面的代码:
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只是拨弄和背景色,看它是否适合你。对我来说它的确如此。是的,我知道这是膨胀和丑陋的代码,它只是当然作为例子。
只是为了理解,如果你能给我更多关于你为什么用32乘以红色值的细节,绿色值64和蓝色值32?谢谢 – AnAurelian 2010-02-03 10:45:04
出于与nobugz答案相同的原因:Windows中的16位RGB(真实)颜色是从5,6和5位(2到5的幂是32,2到6的幂是64)构建的。因此,如果您将原始红色和蓝色字节除以256并将它们乘以32,则可以得到向下舍入的5位表示。这同样适用于Green的6位。 – Webleeuw 2010-02-04 07:47:34