REKTOR_RG
@REKTOR_RG

Как преобразовать RGB в 1 из 24 цветов?

Нужно написать код (функцию), который по трём переменным (RGB), значения которых находятся в пределах от 0 до 255 включительно выдаст наиболее подходящий цвет из списка (на картинке). Всего вариантов 24.
Вообще не могу сообразить, как это написать (кроме как прописать все возможные варианты в if :D )
5cd1c3bf78836686984209.png
Функция должна выглядеть примерно так:
int GetColorFromRGB(int R, int G, int B)
{
    int result = 0;
    //Тут происходит магия
    return result;
}

Понимаю, что должно быть какое-то простое решение, но не могу до него дойти...
Буду очень благодарен за помощь.
  • Вопрос задан
  • 150 просмотров
Решения вопроса 1
Самый простой способ - вычислить расстояние вашего цвета до каждого из 24 и выбрать ближайший.

Ну что-то вроде
Number Distance (Color source, Color target) {
  const dRed   = Math.Abs(target.r - source.r);
  const dGreen = Math.Abs(target.g - source.g);
  const dBlue  = Math.Abs(target.b - source.b);

  return dRed + dGreen + dBlue;
}


Я бы начал с этого и посмотрел, куда оно меня приведет
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Moskus
@Moskus
Поскольку этот ряд из 24 цветов не упорядочен по какому-либо параметру и содержит цвета, которые имеют случайные расстояния между ними в любом из основных цветовых пространств, написать функцию, которая бы математически приводила 24-битные цвета к этой палитре - нельзя. Можно только найти и захардкодить lookup table, либо каждый раз считать расстояние. Декартово (как вам посоветовали в соседнем ответе) или перцептивное (тогда нужно, например, переводить все в цветовое пространство, которое учитывает восприятие человека, и считать в нем).
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы