2013-03-08 46 views
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; 
     } 
+1

黑色,黑色,黑色,黑色,...;那是隨機的嗎? – 2013-03-08 16:49:57

+0

我希望不會有這樣的愚蠢迴應。顯然這有點主觀......但在理由... – user2043533 2013-03-08 16:50:53

+0

保證?這有點主觀。一個人的可讀性是另一個人不可讀的。另外,你需要更具體。我可以選擇2個不同的深色值,並從這2箇中隨機挑選並滿足您目前的問題。 – hatchet 2013-03-08 16:52:08

回答

2

使用HSL你可以說爲L低於一定值什麼是可見的,它有足夠的黑暗足夠對比。但這是一個主觀價值。你可以讓H和S隨機。 HSL可以轉換爲HSV或RGB。

L不應該是隨機的。或者它可能會在您預先定義的範圍內,以提供足夠的對比。即低於固定的Lmax。

1

對於RGB有其計算顏色的亮度的公式:

0.299 * R + 0.587 * G + 0.114 * B

正如所看到的,每個R,G,的B顏色有其自己的亮度係數。 要在白色背景上生成可讀的字體,請生成完全隨機的顏色。然後檢查其亮度是否小於某個預定義的常數C。如果超過Ç和等於一些d> c^,然後通過C/d乘以每個R,G,B值的使亮度等於Ç

+1

而不是乘以'C/D',乘以一個從0到'C/D'。否則,你的發行將傾向於較輕的顏色。 – 2013-03-08 18:52:42

+0

是的,你完全正確。 – aram90 2013-03-09 08:19:35

+0

我想到了一個更好的方法,我們應該用** D **來表示白色的亮度,因此我們通過上面的公式得到** D = 255 **。然後,每種顏色應該乘以** C/D **而不檢查任何條件。 – aram90 2013-03-09 08:21:59