Создание читаемого цвета из RGB? - PullRequest
0 голосов
/ 02 июня 2010

Я добавляю функцию, которая позволит пользователю вводить цвет (например, фиолетовый), и он изменит внешний вид своего профиля на фиолетовый. Он интерпретируется из текста в класс Color, который хранит их внутри себя как числа RGB (int для красного, один для зеленого и другой для синего). То, что я не знаю, как сделать, это логически превратить эти три числа в еще 3, которые сделают читаемый цвет.

Кто-нибудь может мне помочь, как это сделать?

Джо

Ответы [ 4 ]

2 голосов
/ 02 июня 2010

Если я правильно интерпретирую ваш вопрос, вам нужен читаемый цвет текста после того, как кто-то выбрал цвет фона темы. На этот вопрос ответили на старый вопрос:

Хороший цвет текста для заданного фона

1 голос
/ 02 июня 2010

Очевидно, что не существует названия для каждой возможной комбинации RGB! Предположительно, вы хотите найти ближайшую комбинацию, для которой было указано имя?

Так что на самом деле все, что вам нужно, это способ определить, насколько «близко» один RGB к другому. Для простоты я бы предложил Евклидово-квадратное расстояние, то есть (R2-R1) ^ 2 + (G2-G1) ^ 2 + (B2-B1) ^ 2. Тогда все, что вам нужно сделать, это перебрать все ваши «именованные» цвета и найти тот, который имеет наименьшее расстояние.

0 голосов
/ 02 июня 2010

Как уже говорят другие, существует 16,7 миллиона возможных комбинаций, каждая из которых, очевидно, не может иметь определенного имени.

Вы не будете вдаваться в подробности своего варианта использования, но если вы хотите, чтобы он был удобен для конечных пользователей, как насчет использования процентов?

80% red, 50% green, 23% blue

это вполне понятно и для нетехнического человека. Вы бы ограничили (от 256 ^ 3 до 100 ^ 3) количество возможностей, если вы используете целочисленные процентные значения, но не настолько, чтобы ограничивать пользователя фиксированной палитрой именованных цветов.

0 голосов
/ 02 июня 2010

Вы можете посмотреть файл rgb.txt , который поставляется с X11.

Синтаксический анализатор для этого может обеспечить преобразование между этими строками и значениями RGB, которое будет не очень сложно построить и, вероятно, сделает то, что вы ищете.

...