【问题标题】:Finding out if a Hex color is dark or light找出十六进制颜色是深还是浅
【发布时间】:2014-10-15 02:46:25
【问题描述】:

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

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

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

有没有更好的解决方案?

【问题讨论】:

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


    【解决方案1】:

    如果您将 [Hex color to rgb][1] 格式转换为红色绿色和蓝色的总和会怎样 如果超过 ((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 的想法 [1]:How do I get the color from a hexadecimal color code using .NET?

    编辑:固定条件,感谢@sam360

    【讨论】:

    • 是否可以通过调整数字偏向深色?例如,#3f994a 被识别为亮色。
    • 是的,你将不得不改变“255 / 2”,如果你输入“255 / 3”,你将有更多的颜色被识别为明亮而不是黑暗,如果你输入类似“(255 / 3) * 2" 你会有比亮色更多的暗色
    • 我认为情况是反过来的,如果数字大于127.5是亮的,小于可以认为是暗的。
    • 迟到了,但这是一个有用的答案!
    【解决方案2】:

    从 RGB 分量计算颜色的luminance 非常简单。虽然如果从人类的角度来看,这不会给出地球上最准确的结果,但它会比其他天真的尝试要好得多。

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

    Y = 0.2126 R + 0.7152 G + 0.0722 B
    

    然后,您可以为 Y 选择一个任意阈值,用于区分“深色”和“浅色”颜色。

    【讨论】:

      猜你喜欢
      • 2011-06-08
      • 2011-11-28
      • 1970-01-01
      • 2014-08-07
      • 2014-05-01
      • 1970-01-01
      • 2021-09-11
      • 2011-10-25
      • 2021-05-20
      相关资源
      最近更新 更多