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

C# 生成可以在白色字体上轻松读取的颜色的算法?,c#,asp.net,algorithm,C#,Asp.net,Algorithm,给定HSV或RGB,是否有一种算法可以为保证在纯白色字体上可读的背景生成随机颜色 它不必是特定于语言的实现,尽管我使用的是C# 谢谢 我做了这个,但我相信它可以改进: public static System.Drawing.Color GenerateRandomLiteColor() { var rnd = new Random(DateTime.Now.Millisecond); double mul = 240.0;

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

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


我不应该是随机的。或者,它可以在预先定义的范围内,以提供足够的对比度。例如,在固定的最大亮度下。

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

0.299*R+0.587*G+0.114*B

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

黑色、黑色、黑色、。。。;这够随机的吗?我希望不会有任何像这样愚蠢的反应。显然这有点主观。。。但在合理范围内…保证?这有点主观。一个人的可读性是另一个人的不可读性。另外,你需要更具体一些。我可以选择两个不同的深色值,然后从这两个值中随机选择,以满足您当前的问题。澄清:我们应该尝试生成一系列不同的颜色,还是样本可能是独立的?@JanDvorak,您显然是这个随机数生成器的粉丝:而不是乘以
C/D
,乘以0到
C/D
之间的随机数。否则你的分布会倾向于更浅的颜色。我想了一个更好的方法,我们应该用D表示白色的亮度,因此我们可以通过上面的公式得到D=255。然后,在不检查任何条件的情况下,将每种颜色乘以C/D。