什么样的颜色混合使前景与背景颜色不同?

时间:2013-04-18 14:23:21

标签: c# winforms colors blending color-blending

假设我知道背景色并且我想相应地改变前色以使文本与背景不同。例如,如果当前文本颜色(forecolor)是RED,对于用户的某些更改,背景颜色也变为RED或接近RED(这将使文本难以辨认),在这种情况下,我想要使用更改前景色一些颜色混合配方使其与背景颜色不同,并保持易读性。

希望你能提供帮助,谢谢。

1 个答案:

答案 0 :(得分:2)

根据this blog entry上的信息,我可以提出以下C#代码,它们返回Color.BlackColor.White以获得与给定(背景)颜色的最佳对比:

public Color GetContrastingColor(Color backColor)
{
    int r = (int)backColor.R;
    int g = (int)backColor.G;
    int b = (int)backColor.B;

    int yiqSpace = ((r * 299) + (g * 587) + (b * 114)) / 1000;

    if (yiqSpace > 131)
    {
        return Color.Black;
    }
    else
    {
        return Color.White;
    }
}

该方法使用YIQ来确定颜色是亮还是暗,并返回一种对比色。