Преобразование UIColor из RGB в HSV, установка яркости в UIColor
В моем приложении я пытаюсь рисовать разными цветами. У меня есть свой собственный набор цветов, но я хочу добавить к этому ползунку для цветной яркости. Для дублера: я выбираю цвет, который отображается где-то в качестве фонового цвета, и к этому цвету я хочу добавить слайдер, который будет сдвигаться от 1 до 0 и изменять яркость цвета и отображать цвет в окне. Поэтому я хочу спросить, есть ли способ конвертировать.
в моем проекте я использую это:
CGContextSetRGBStrokeColor(current, R, G, B, A);
поэтому в любое время, когда я сдвигаю слайдер, мне нужно изменить яркость цвета, поэтому мне нужно преобразовать свой UIColor
- представленный как RGB в HSV, а затем вернуться к RGB для его использования еще раз.
Существует ли какой-либо алгоритм преобразования RGB в HSV или есть ли в iOS 5 или Xcode4?
Ответы
Ответ 1
+(struct hsv_color)HSVfromRGB:(struct rgb_color)rgb
{
struct hsv_color hsv;
CGFloat rgb_min, rgb_max;
rgb_min = MIN3(rgb.r, rgb.g, rgb.b);
rgb_max = MAX3(rgb.r, rgb.g, rgb.b);
if (rgb_max == rgb_min) {
hsv.hue = 0;
} else if (rgb_max == rgb.r) {
hsv.hue = 60.0f * ((rgb.g - rgb.b) / (rgb_max - rgb_min));
hsv.hue = fmodf(hsv.hue, 360.0f);
} else if (rgb_max == rgb.g) {
hsv.hue = 60.0f * ((rgb.b - rgb.r) / (rgb_max - rgb_min)) + 120.0f;
} else if (rgb_max == rgb.b) {
hsv.hue = 60.0f * ((rgb.r - rgb.g) / (rgb_max - rgb_min)) + 240.0f;
}
hsv.val = rgb_max;
if (rgb_max == 0) {
hsv.sat = 0;
} else {
hsv.sat = 1.0 - (rgb_min / rgb_max);
}
return hsv;
}
Ответ 2
Мне непонятно, если в вашем первоначальном вопросе вы действительно хотите "яркость" или альфа. Цветовые схемы RGB и HSV совершенно разные.
Если я правильно интерпретирую ваше намерение:
Вам не нужно конвертировать из RGB в HSV и обратно в RGB, если все, что вы хотите сделать, это управлять альфа-каналом для цвета RGB.
Самый простой и эффективный способ добиться того, что вы хотите сделать, - просто добавить слайдер для альфы и вывести из него результат, чтобы изменить прозрачность цвета.