Asp.net mvc 4 找出十六进制颜色是暗的还是亮的
使用C#我想知道一个十六进制颜色(网络格式,例如:#FF2233)是暗的还是亮的,我可以根据它来决定前颜色(字体颜色)应该是什么 应用程序的用户选择颜色作为某些元素的背景。 然后,程序需要确定用户的背景色是否为深色,然后选择白色作为字体颜色(以获得最佳可读性和对比度),否则选择黑色 到目前为止,我一直在努力计算“F”、“E”、“C”、“D”、“B”和“A”出现的次数。如果有至少4次出现,我认为颜色明亮。它在大约70%的时间内有效Asp.net mvc 4 找出十六进制颜色是暗的还是亮的,asp.net-mvc-4,c#-4.0,Asp.net Mvc 4,C# 4.0,使用C#我想知道一个十六进制颜色(网络格式,例如:#FF2233)是暗的还是亮的,我可以根据它来决定前颜色(字体颜色)应该是什么 应用程序的用户选择颜色作为某些元素的背景。 然后,程序需要确定用户的背景色是否为深色,然后选择白色作为字体颜色(以获得最佳可读性和对比度),否则选择黑色 到目前为止,我一直在努力计算“F”、“E”、“C”、“D”、“B”和“A”出现的次数。如果有至少4次出现,我认为颜色明亮。它在大约70%的时间内有效 有更好的解决办法吗 从RGB组件计算颜色的颜色非常简单。虽然从人类
有更好的解决办法吗 从RGB组件计算颜色的颜色非常简单。虽然从人类的角度来看,这不会给出地球上最准确的结果,但它将比其他天真的尝试要好得多 给定颜色分量R、G、B的值,亮度Y为
Y = 0.2126 R + 0.7152 G + 0.0722 B
然后,您将为Y选择一个任意阈值,用于区分“暗”和“亮”颜色。如果您转换格式,然后将红、绿和蓝相加,会怎么样
如果超过((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
}
编辑:由于@Jon idea更新了亮度是否可以通过调整数字来偏向深色?例如#3f994a被识别为明亮的颜色。是的,您必须更改“255/2”,如果您输入“255/3”,您将有更多的颜色被识别为明亮而不是黑暗,如果您输入类似“(255/3)*2”的内容,您将有更多的暗颜色而不是明亮的颜色。我认为情况是相反的,如果数字大于127.5,则表示亮,小于则表示暗。晚了,但这是一个有用的答案!