Pages

June 27, 2013

HSV to RGB Color space conversion

Color space conversion made easy to use. Just call this useful Objective-C method.
You need:
- http://objective-c-functions.blogspot.com/2013/06/helpful-color-struct-rgb-hsv.html


/** Convert from HSV to RGB.

 RGB range is [0;1] for all channels. HSV range can be anything sane ([0;360] or [0;1]).

 @param col HSV color to convert.
 @return Returns RGB color.
 @see hsvFromRgb:

 */
+ (COLOR_RGB)rgbFromHsv:(COLOR_HSV)col {

    CGFloat h1 = col.h;
    CGFloat s1 = col.s;
    CGFloat v1 = col.v;

    CGFloat var_r, var_g, var_b;

    if (h1 > 1.0f) {
        h1 = h1 - (CGFloat)floorf(h1);
    }
    if (h1 == 1.0f)    h1 = 0.0f;
    if (v1 < 0.0f)    v1 = 0.0f;
    if (v1 > 1.0f)    v1 = 1.0f;
    if (s1 < 0.0f)    s1 = 0.0f;
    if (s1 > 1.0f)    s1 = 1.0f;

    if (s1 == 0.0f) {
        var_r = var_g = var_b = v1;
    }
    else {

        CGFloat var_i, var_h, var_1, var_2, var_3;

        var_h = h1 * 6.0f;
        var_i = (CGFloat)floorf(var_h);
        var_1 = v1 * (1.0f - s1);
        var_2 = v1 * (1.0f - s1 * (var_h - var_i));
        var_3 = v1 * (1.0f - s1 * (1.0f - (var_h - var_i)));

        if (var_i == 0.0f) {
            var_r = v1;
            var_g = var_3;
            var_b = var_1;
        }
        else if (var_i == 1.0f) {
            var_r = var_2;
            var_g = v1;
            var_b = var_1;
        }
        else if (var_i == 2.0f) {
            var_r = var_1;
            var_g = v1;
            var_b = var_3;
        }
        else if (var_i == 3.0f) {
            var_r = var_1;
            var_g = var_2;
            var_b = v1;
        }
        else if (var_i == 4.0f) {
            var_r = var_3;
            var_g = var_1;
            var_b = v1;
        }
        else {
            var_r = v1;
            var_g = var_1;
            var_b = var_2;
        }
    }


    COLOR_RGB ret = {var_r, var_g, var_b};
    return ret;
}




Download the ready-for-use source file (.m) of HSV to RGB Color space conversion

No comments:

Post a Comment