sam*_*360 4 c#-4.0 asp.net-mvc-4
使用 C# 我想找出十六进制颜色(网络格式,例如:#FF2233)是深还是浅,我可以根据它来决定前景色(字体颜色)应该是什么。
应用程序的用户选择颜色作为某些元素的背景。然后程序需要确定用户的背景颜色是否为暗色,然后选择白色作为字体颜色(以获得最佳可读性和对比度),否则选择黑色。
到目前为止,我一直在尝试计算“F”、“E”、“C”、“D”、“B”和“A”出现的次数。如果至少出现 4 次,我认为颜色很亮。它在大约 70% 的时间内有效。
有没有更好的解决方案?
小智 8
如果你将你的十六进制颜色转换为 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
}
Run Code Online (Sandbox Code Playgroud)
编辑:更新亮度,感谢@Jon 的想法
从 RGB 分量计算颜色的亮度非常简单。如果从人类的角度来看,这不会给出地球上最准确的结果,但它会比其他幼稚的尝试要好得多。
给定颜色分量 R、G、B 的值,亮度 Y 为
Y = 0.2126 R + 0.7152 G + 0.0722 B
Run Code Online (Sandbox Code Playgroud)
然后,您将为 Y 选择一个任意阈值,将“深色”与“浅色”分开。
| 归档时间: |
|
| 查看次数: |
2508 次 |
| 最近记录: |