Случайный цвет фона для нескольких цветов переднего плана
Мне нужно сгенерировать случайный цвет фона, который визуально приятен для трех типов текста: ARGB(255,255,255,255)
, ARGB(63,255,255,255)
, а также ARGB(255,0,0,0)
, Цвета - белый, белый с непрозрачностью 0,25 и черный. Я еще не видел пример на SO или где-то еще, который сравнивает цвет с несколькими цветами, чтобы решить, есть ли между ними хороший контраст (сравнение выполняется только для двух цветов). Я не совсем понимаю теорию цвета, поэтому я ищу помощь.
2 ответа
Контрастные цвета к белому - любые темные. С другой стороны, контрастирующие цвета с черным - это любые темные цвета. Поэтому сложно выбрать контрастный цвет как для белого, так и для черного.
Это может быть какой-то средний серый цвет или любой другой цвет с такой же яркостью.
Яркость можно рассчитать по формуле:
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);
Результирующий цвет довольно контрастен как с черным, так и с белым.
Во-первых, вам необходимо ознакомиться с цветовыми пространствами и решить, что сделает случайный цвет визуально привлекательным. Цвет в основном может быть представлен как три компонента во многих различных пространствах. Предпочтительным представлением для компьютеров является RGB с количеством красного, зеленого и синего, которое соответствует цвету. Однако для человеческого глаза HSV (оттенок, насыщенность, значение), вероятно, легче понять. В этом цветовом пространстве насыщенность представляет, насколько "насыщен" цвет, то есть диапазон серой шкалы имеет нулевую насыщенность, поскольку он действительно не представляет цвет. Значение (или интенсивность) воспринимается как яркость, а оттенок дает вам представление о том, в каком направлении спектра (думайте на радуге) принадлежит цвет. Альфа-значение не является частью самого цвета, оно скорее определяет, как конкретный цвет смешивается с фоном (то есть результирующий цвет рассчитывается как взвешенная сумма переднего цвета по его альфа-компоненту и цвету фона)
Теперь с точки зрения выбора визуально привлекательного цвета, который является более сложным и зависит больше от каждого отдельного вкуса. Обычно вы получаете высококонтрастный цвет, выбирая другой цвет, расстояние которого в цветовом пространстве HSV достаточно велико. Фактически, выбор цвета с одним из двух одинаковых компонентов (например, с одинаковой насыщенностью и интенсивностью), но с совершенно другим оттенком, даст вам цвет, который будет сильно контрастировать с исходным. Формулы преобразования из RGB в HSV и наоборот можно найти здесь. Надеюсь это поможет.