找出十六进制颜色是暗还是浅

时间:2014-08-21 12:51:06

标签: asp.net-mvc-4 c#-4.0

使用C#我想知道Hex颜色(网页格式,例如:#FF2233)是暗还是亮,我可以根据这些颜色决定前色(字体颜色)应该是。

应用程序的用户选择颜色作为某些元素的背景。 然后程序需要弄清楚用户的背景颜色是否较暗,然后选择白色作为字体颜色(为了获得最佳的可读性和对比度),否则选择黑色。

到目前为止,我一直在尝试计算“F”,“E”,“C”,“D”,“B”和“A”的出现次数。如果至少发生4次,我认为颜色很明亮。它的工作时间约为70%。

有更好的解决方案吗?

2 个答案:

答案 0 :(得分:4)

从RGB组件计算颜色的luminance非常简单。如果从人类的角度来判断,这将无法在地球上给出最准确的结果,但它会比其他天真的尝试大得多。

给定颜色分量R,G,B的值,亮度Y

Y = 0.2126 R + 0.7152 G + 0.0722 B

然后你会选择Y的任意阈值来分隔" dark"来自" light"颜色。

答案 1 :(得分:0)

如果您转换Hex color to rgb格式然后将红绿色和蓝色相加,该怎么办? 如果它结束了((255 * 3)/ 2)它是一个深色,否则它是浅色的

        System.Drawing.Color col = System.Drawing.ColorTranslator.FromHtml("#FF2233");
        if (col.R * 0.2126 + col.G * 0.7152 + col.B * 0.0722 > 255 / 2)
        {
            //dark color
        }
        else
        {
            //light color
        }

编辑:更新了Luminance,感谢@Jon想法