Asp.net mvc 4 找出十六进制颜色是暗的还是亮的

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组件计算颜色的颜色非常简单。虽然从人类

使用C#我想知道一个十六进制颜色(网络格式,例如:#FF2233)是暗的还是亮的,我可以根据它来决定前颜色(字体颜色)应该是什么

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

到目前为止,我一直在努力计算“F”、“E”、“C”、“D”、“B”和“A”出现的次数。如果有至少4次出现,我认为颜色明亮。它在大约70%的时间内有效


有更好的解决办法吗

从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,则表示亮,小于则表示暗。晚了,但这是一个有用的答案!