使用C#我想知道Hex颜色(网页格式,例如:#FF2233)是暗还是亮,我可以根据这些颜色决定前色(字体颜色)应该是。
应用程序的用户选择颜色作为某些元素的背景。 然后程序需要弄清楚用户的背景颜色是否较暗,然后选择白色作为字体颜色(为了获得最佳的可读性和对比度),否则选择黑色。
到目前为止,我一直在尝试计算“F”,“E”,“C”,“D”,“B”和“A”的出现次数。如果至少发生4次,我认为颜色很明亮。它的工作时间约为70%。
有更好的解决方案吗?
答案 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想法