2013-03-08 2 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

черный, черный, черный, черный, ...; достаточно ли достаточно? –

+0

Я надеялся, что такого глупого ответа не будет. Очевидно, что это немного субъективно ... но в пределах разумного ... – user2043533

+0

Гарантировано? Это немного субъективно. Одно читаемое человеком - это нечитаемое. Кроме того, вам нужно быть более конкретным. Я могу выбрать 2 разных значения темного цвета и случайным образом выбрать из них 2 и удовлетворить ваш текущий вопрос. – hatchet

ответ

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. Если она превышает C и равна некоторому D> С, а затем умножить каждое из значений R, G, B с помощью C/D, чтобы сделать яркость равную C.

+1

Вместо умножения на 'C/D', умножить на случайное число от 0 на 'C/D'. В противном случае ваше распределение будет способствовать более светлым цветам. –

+0

Да, ты совершенно прав. – aram90

+0

Я думал о лучшем подходе, мы должны обозначить ** D ** яркость белого цвета, и поэтому мы получаем ** D = 255 ** по приведенной выше формуле. Затем каждый цвет должен быть умножен на ** C/D ** без проверки каких-либо условий. – aram90

Смежные вопросы