«Лучший цвет» очень субъективен и зависит от контекста. Это зависит от того, какой эффект вы хотите: если вы хотите максимально возможный контраст, ищите дополнительные цвета (это даст вам красный на зеленом, желтый на синем и т. Д.). Если вы хотите, чтобы цвета были «похожими», ищите аналогичные гармонии. Если вы хотите выбрать между черным и белым только, измерьте яркость (хомяк опубликовал очень хорошую формулу для этого).
Куда бы вы ни пошли, цветовая модель HSV - это ключ.
Получение дополнительных или аналогичных цветов тривиально (например, hue_text = (hue_bg + 180) % 360
ИЛИ hue_text = (hue_bg + 30) % 360
).
Вы также можете поэкспериментировать со значением (яркостью) и насыщенностью для лучшей контрастности. Например, v_text = 1 - v_bg
может дать вам темный текст на светлом фоне и наоборот (не пропустите средние тона!). Он не должен быть линейным - вы также можете использовать пошаговую функцию, например: if v_bg < 0.5 then v_text = 1 else v_text = 0
или if s_bg < 0.5 then s_text = 1 else s_text = 0
(яркие на бледном).
Это всего лишь несколько подсказок. Одним словом: Это зависит!
Google для теории цвета и цветовых гармоний. Некоторые ссылки:
http://www.tigercolor.com/color-lab/color-theory/color-harmonies.htm
http://www.colormatters.com/color-and-design/basic-color-theory