Я экспериментировал с реализацией палитры цветов в моем приложении для 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.