我的主页

快递查询 :http://m.kuaidi100.com     爱快递查询 :http://www.aikuaidi.cn/              

http://www.qtcn.org/bbs/u/168050  [收藏] [复制]

w642833823

  • 10

    关注

  • 68

    粉丝

  • 42

    访客

  • 等级:新手上路
  • 总积分:43
  • 保密,2011-12-07

最后登录:2024-04-28

更多资料

日志

记录用C和Qt实现HSLtoRGB函数

2023-09-14 21:10
C语言版:
  1. void HSLtoRGB(float h, float s, float l, int* r, int* g, int* b) {
        if (s == 0) {
            // 灰色阶段
            *r = *g = *b = l * 255;
        } else {
            float q = l < 0.5 ? l * (1 + s) : l + s - l * s;
            float p = 2 * l - q;
            float hk = h / 360.0;


            float tr = hk + 1.0 / 3.0;
            float tg = hk;
            float tb = hk - 1.0 / 3.0;


            // 确保值在0到1之间
            if (tr < 0) tr += 1;
            if (tr > 1) tr -= 1;
            if (tg < 0) tg += 1;
            if (tg > 1) tg -= 1;
            if (tb < 0) tb += 1;
            if (tb > 1) tb -= 1;


            // 计算红、绿、蓝分量
            *r = tr < 1.0/6.0 ? p + (q - p) * 6 * tr : tr < 1.0/2.0 ? q : tr < 2.0/3.0 ? p + (q - p) * 6 * (2.0/3.0 - tr) : p;
            *g = tg < 1.0/6.0 ? p + (q - p) * 6 * tg : tg < 1.0/2.0 ? q : tg < 2.0/3.0 ? p + (q - p) * 6 * (2.0/3.0 - tg) : p;
            *b = tb < 1.0/6.0 ? p + (q - p) * 6 * tb : tb < 1.0/2.0 ? q : tb < 2.0/3.0 ? p + (q - p) * 6 * (2.0/3.0 - tb) : p;


            // 缩放到0到255之间
            *r *= 255;
            *g *= 255;
            *b *= 255;
        }
    }
QT版:
  1. #include <QColor>

    QColor hslToRgb(int h, int s, int l)
    {
        qreal hue = h / 360.0;
        qreal saturation = s / 100.0;
        qreal lightness = l / 100.0;

        if (saturation == 0) {
            int value = lightness * 255;
            return QColor(value, value, value);
        }

        qreal q = lightness < 0.5 ? lightness * (1 + saturation) : lightness + saturation - lightness * saturation;
        qreal p = 2 * lightness - q;

        qreal r = hueToRgb(p, q, hue + 1.0/3.0);
        qreal g = hueToRgb(p, q, hue);
        qreal b = hueToRgb(p, q, hue - 1.0/3.0);

        int red = r * 255;
        int green = g * 255;
        int blue = b * 255;

        return QColor(red, green, blue);
    }

    qreal hueToRgb(qreal p, qreal q, qreal t)
    {
        if (t < 0) t += 1;
        if (t > 1) t -= 1;
        if (t < 1.0/6.0) return p + (q - p) * 6 * t;
        if (t < 1.0/2.0) return q;
        if (t < 2.0/3.0) return p + (q - p) * (2.0/3.0 - t) * 6;
        return p;
    }


分类:QT|回复:1|浏览:258|全站可见|转载
 
 
删除

liudianwu:QColor内置了以上函数,toHsl  toRgb  不要太全。

2023-09-15 08:53 -

Powered by phpwind v8.7 Certificate Copyright Time now is:04-28 20:21
©2005-2016 QTCN开发网 版权所有 Gzip disabled