3

给定 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;
        }
4

2 回答 2

2

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

0.299 * R + 0.587 * G + 0.114 * B

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

于 2013-03-08T18:24:10.393 回答
2

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

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

于 2013-03-08T16:53:26.507 回答