Преобразовать значения RGB в координаты цветового круга - PullRequest
0 голосов
/ 12 июня 2018

У меня есть изображение цветового круга от Google, и теперь я хотел бы найти способ каким-то образом вычислить координаты x и y любого цвета rgb в цветовом круге.Если это немного сбивает с толку, я попытаюсь объяснить это немного лучше: у меня есть изображение цветового круга - как у вас на paint.net, чтобы выбрать цвет.У меня также есть цвет в виде значений RGB.Теперь я хочу получить координаты x и y изображения, которые имеют именно этот цвет.Я, однако, понятия не имею, как можно это сделать.Я пытаюсь использовать это в приложении, созданном с помощью MIT App Inventor 2, что немного ограничивает мои возможности.Так что лучше всего было бы математическое решение.Я надеюсь, что кто-то здесь может помочь мне с этим.

Редактировать: Итак, вот картинка, которую я использую.Я действительно хотел иметь это здесь все время, но забыл это ...

enter image description here

1 Ответ

0 голосов
/ 04 февраля 2019

Я экспериментировал с реализацией палитры цветов в моем приложении для iOS с использованием CIFilter и должен был решить ту же проблему.

Я обнаружил, что значения HSV для данной цветовой карты довольно приятноэтот цветовой круг:

  • hue - угол вокруг колеса.0 или 1 - это 0 или 2pi радиан, 0,75 - это число пи / 2, 0,5 - это число пи и т. Д. В основном оно идет от 1 до 0 по кругу по часовой стрелке, начиная с крайнего правого угла.
  • saturation - как далекоВы находитесь от центра круга к краю, в процентах от радиуса.0 в середине, 1 на краю.
  • value - это темнота цвета (inputValue в посте, на который я ссылался выше).

Итак, учитываяhue и saturation для данного цвета, см. Этот psuedocode:

float pickerWidth = myPickerImage.size.width;
float radius = pickerWidth / 2;
float colorRadius = saturation * radius;
float angle = (1 - hue) * (2 * pi);
float midX = myPicker.size.width / 2; //midpoint of the circle
float midY = myPicker.size.height / 2;
float xOffset = cos(angle) * colorRadius; //offset from the midpoint of the circle
float yOffset = sin(angle) * colorRadius;
Point colorPoint = new Point(midX + xOffset, midY + yOffset);

Параметр value будет использоваться для реализации ползунка темноты.

Вам потребуетсяконвертировать RGB в HSV - UIColor делает это для меня автоматически, но держу пари, есть способ сделать это и на Android.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...