2014-12-20 4 views
0

Мне нужно создать случайный цвет фона, который визуально приятен для трех типов текста: ARGB(255,255,255,255), ARGB(63,255,255,255) и ARGB(255,0,0,0). Цвета белые, белые с непрозрачностью 0,25 и черные. Я еще не видел пример SO или где-то еще, который сравнивает цвет с несколькими цветами, чтобы решить, есть ли хороший контраст между ними (сравнение выполняется только между двумя цветами). Я не совсем понимаю теорию цвета, поэтому я ищу помощь.Случайный цвет фона для нескольких цветов переднего плана

+0

Я предлагаю выбирать случайным образом и измерять расстояние. – Jasen

+0

Попробуйте посмотреть здесь: http://24ways.org/2010/calculating-color-contrast/ – Icemanind

ответ

0

Во-первых, вам нужно познакомиться с цветовыми пространствами и решить, что сделает случайный цвет визуально привлекательным. Цвет в основном может быть представлен как three components in many different spaces. Предпочтительным представлением для компьютеров является RGB с количеством красного, зеленого и синего цветов, соответствующих цвету. Однако для человеческого глаза HSV (оттенок, насыщенность, значение), вероятно, легче понять. В этом цветовом пространстве насыщенность представляет собой «насыщенный» цвет, то есть серая шкала имеет насыщенность нуля, поскольку она действительно не представляет цвет. Значение (или интенсивность) думают об этом как о яркости, так и о оттенке, что дает вам в каком направлении спектр (подумайте о радуге), цвет принадлежит. Значение альфа-значения не является частью самого цвета, оно скорее указывает, как определенный цвет смешивается с фоном (то есть полученный цвет рассчитывается как взвешенная сумма переднего цвета по его альфа-компоненту и цвету фона)

Теперь с точки зрения выбора визуально привлекательного цвета, который является более сложным и зависит больше от каждого индивидуального вкуса. Вы обычно достигаете высокого контрастного цвета, выбирая другой цвет, расстояние которого в цветовом пространстве HSV достаточно велико. Фактически, выбор цвета с одним из двух компонентов одинаковым (например, с той же насыщенностью и интенсивностью), но с очень разным оттенком даст вам цвет, который будет иметь высокий контраст с оригинальным. Формулы преобразования от RGB до HSV и наоборот можно найти here. Надеюсь это поможет.

0

Контрастные цвета для белого - любые темные. С другой стороны, контрастные цвета для черного - темные. Поэтому трудно выбрать контрастный цвет как белый, так и черный.

Это может быть какой-то средний серый цвет или любой другой цвет с одинаковой яркостью.

Яркость может быть вычислена по формуле:

int brightness = (int)(0.30 * red + 0.59 * green + 0.11 * blue); 

Давайте зафиксировать значение brightness в среднем (т.е. 128), а затем случайным образом выбирать red и green значения. Тогда мы можем вычислить blue:

var random = new Random(); 
var red = random.Next(256); 
var green = random.Next(256); 
var blue = (int)(128 - 0.30 * red - 0.59 * green); 

Результирующий цвет вполне контраст черного и белого.

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