代码之家  ›  专栏  ›  技术社区  ›  Chris

评估十六进制值是暗值还是亮值

  •  12
  • Chris  · 技术社区  · 16 年前

    我正在构建的ASP.NET web应用程序的用户可以选择用于某些元素(例如按钮/标题)的颜色,以促进某种程度的个性化。

    问题是,默认情况下,这些层上的文本是黑色的……我试图做的是计算用户通过选择器选择的十六进制值,并以编程方式在黑白文本之间切换——这可以是JavaScript,也可以是代码隐藏。

    4 回复  |  直到 16 年前
        1
  •  16
  •   Toad    16 年前

    不要像其他回答者(ricknz)所说的那样将RGB组件加在一起,实际上应该取它们的平均值。

    另外,由于绿色比蓝色更容易被人眼看到,你也应该增加重量。

    所以你必须把红色部分乘以0.299,绿色乘以0.587,蓝色乘以0.114

    编辑: 下面是一个计算它的代码段:

     float calcLuminance(int rgb)
     {
          int r = (rgb & 0xff0000) >> 16;
          int g = (rgb & 0xff00) >> 8;
          int b = (rgb & 0xff);
    
          return (r*0.299f + g*0.587f + b*0.114f) / 256;
     }
    

    p、 由于RGB从0-256(而不是0-1)开始运行,因此被256除法

    编辑:将计算改为除以256,而不是768

        2
  •  10
  •   Community Mohan Dere    9 年前

    HSL L

    javascript function 为了做转换。

        3
  •  4
  •   CodeGrue    12 年前

        var hexcolor = "#FA3CD0";
        var color = System.Drawing.ColorTranslator.FromHtml(hexcolor);
        var brightness = color.GetBrightness();
        if (brightness > .5)
        {
            // color is light
        }
        else
        {
            // color is dark
        }
    
        4
  •  1
  •   RickNZ    16 年前

    十六进制颜色代码由三个强度值组成,一个表示红色,一个表示绿色,一个表示蓝色,每个值有2个十六进制数字。要确定暗与光,只需将三个值相加即可。较小的数字比较大的值更暗。

    对于#010203,将RGB值相加得到01+02+03=06。这将比#102030=60暗。