RGB的快速算法< - > HSL转换

时间:2012-10-27 23:44:15

标签: graphics colors color-space

我正在寻找快速算法(通常仅使用整数)将RGB数据转换为HSL数据然后转换回RGB数据。 我已经为这些转换找到了算法(维基百科),但它们并不快,因为它们需要浮动操作。

有没有人知道只使用整数的高效算法?

1 个答案:

答案 0 :(得分:1)

差不多5年没有回答?好吧,这里有50%:HSL - > RGB

uint32_t hsl2rgb(uint8_t h, uint8_t s, uint8_t l) {
    uint8_t  r, g, b, lo, c, x, m;
    uint16_t h1, l1, H;
    l1 = l + 1;
    if (l < 128) {
        c = ((l1<<1) * s) >> 8;
    }
    else {
        c = (512 - (l1<<1)) * s >> 8;
    }

    H = h*6; // 0 to 1535 (actually 1530)
    lo = H & 255;          // Low byte  = primary/secondary color mix
    h1 = lo + 1;
    if ((H & 256) == 0) { // even sextant, like red to yellow
        x = h1 * c >> 8;
    }
    else { // odd sextant, like yellow to green
        x = (256 - h1) * c >> 8;
    }
    m = l - (c >> 1);
    switch(H >> 8) {       // High byte = sextant of colorwheel
        case 0 : r = c  ; g = x  ; b = 0  ; break; // R to Y
        case 1 : r = x  ; g = c  ; b = 0  ; break; // Y to G
        case 2 : r = 0  ; g = c  ; b = x  ; break; // G to C
        case 3 : r = 0  ; g = x  ; b = c  ; break; // C to B
        case 4 : r = x  ; g = 0  ; b = c  ; break; // B to M
        default: r = c  ; g = 0  ; b = x  ; break; // M to R
    }

    return r+m<<16 | g+m<<8 | b+m;
}