生成可以在白色字体上轻松读取的颜色的算法?

时间:2013-03-08 16:46:50

标签: c# asp.net algorithm

鉴于HSV或RGB,是否有一种算法可以为背景提供随机颜色,保证在纯白字体上可读?

它不必是特定于语言的实现,但我使用的是C#。

由于

我做了这个,但我相信它可以改进:

   public static System.Drawing.Color GenerateRandomLiteColor()
        {
            var rnd = new Random(DateTime.Now.Millisecond);
            double mul = 240.0;
            HSLColor c = new HSLColor(rnd.NextDouble() * mul,
                ((rnd.NextDouble() * 0.6) + 0.5) * mul, ((rnd.NextDouble() * 0.35) + 0.5) * mul);

            string s = c.ToRGBString();
            return c;
        }

2 个答案:

答案 0 :(得分:2)

使用HSL你可以说L低于某个值的任何东西都是可见的,它有足够的黑暗以获得足够的对比度。但这将是一个主观价值。你可以让H和S随机。然后可以将HSL转换为HSV或RGB。

L不应该是随机的。或者它可能是在您预定义的范围内,以提供足够的对比度。即低于固定的Lmax。

答案 1 :(得分:2)

对于RGB,有一个计算颜色亮度的公式:

0.299 * R + 0.587 * G + 0.114 * B

如您所见,每种R,G,B颜色都有自己的亮度系数。 要在白色背景上生成可读字体,请生成完全随机的颜色。然后检查其亮度是否小于某个预定义的常数 C 。如果它超过 C 并且等于某些 D> C ,然后将R,G,B值中的每一个乘以 C / D ,使亮度等于 C