UIColor преобразование из RGB в HSV, установите яркость в UIColor - PullRequest
2 голосов
/ 04 февраля 2012

В моем приложении я пытаюсь рисовать разными цветами.У меня есть свой собственный палитр цветов, но я хочу добавить к этому ползунку выбора цветовой яркости.Для изучения: я выбираю цвет, который отображается где-то в поле зрения в качестве цвета фона, и к этому цвету я хочу добавить ползунок, который будет скользить от 1 до 0 и изменять яркость цвета и отображать цвет в окне.Поэтому я хочу спросить, есть ли какой-либо возможный способ, как конвертировать.

в моем проекте я использую это:

CGContextSetRGBStrokeColor(current, R, G, B, A);

, поэтому при каждом перемещении ползунка мне нужно изменить яркость цвета, поэтому мне нужно преобразовать свой UIColor - в видеRGB в HSV и затем обратно в RGB для использования его еще раз.

Существует ли какой-либо алгоритм преобразования RGB в HSV или есть в iOS 5 или Xcode4?

Ответы [ 2 ]

7 голосов
/ 05 февраля 2012
+(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;
}
0 голосов
/ 30 января 2018

Мне не ясно, действительно ли в вашем первоначальном вопросе вы хотите "яркость" или альфа. Цветовые схемы RGB и HSV совершенно разные.

Если я правильно истолковал ваши намерения:

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

Самый простой и эффективный способ добиться того, что вы хотите сделать, - это просто добавить ползунок для альфа-канала и использовать выходные данные для изменения прозрачности цвета.

...