RGB与HSL、ESL转换
生活随笔
收集整理的這篇文章主要介紹了
RGB与HSL、ESL转换
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
qt 實現的,windows以240為底
void RGB2HSL(QColor AColor, double &H, double &S, double &L) {double R, G, B, Max, Min, del_R, del_G, del_B, del_Max;R = AColor.red() / 255.0; G = AColor.green() / 255.0;B = AColor.blue() / 255.0;Min = qMin(R, qMin(G, B)); Max = qMax(R, qMax(G, B)); del_Max = Max - Min; L = (Max + Min) / 2.0;if (del_Max == 0) //This is a gray, no chroma...{//H = 2.0/3.0; H = 0; S = 0;}else {if (L < 0.5) S = del_Max / (Max + Min);else S = del_Max / (2 - Max - Min);del_R = (((Max - R) / 6.0) + (del_Max / 2.0)) / del_Max;del_G = (((Max - G) / 6.0) + (del_Max / 2.0)) / del_Max;del_B = (((Max - B) / 6.0) + (del_Max / 2.0)) / del_Max;if (R == Max) H = del_B - del_G;else if (G == Max) H = (1.0 / 3.0) + del_R - del_B;else if (B == Max) H = (2.0 / 3.0) + del_G - del_R;if (H < 0) H += 1;if (H > 1) H -= 1;} }QColor HSL2RGB(double H, double S, double L) {double R, G, B;double var_1, var_2;if (S == 0) {R = L * 255.0; G = L * 255.0;B = L * 255.0;}else{if (L < 0.5) var_2 = L * (1 + S);else var_2 = (L + S) - (S * L);var_1 = 2.0 * L - var_2;R = 255.0 * Hue2RGB(var_1, var_2, H + (1.0 / 3.0));G = 255.0 * Hue2RGB(var_1, var_2, H);B = 255.0 * Hue2RGB(var_1, var_2, H - (1.0 / 3.0));}QColor retColor = QColor::fromRgb(R, G, B);return retColor; }double Hue2RGB(double v1, double v2, double vH) {if (vH < 0) vH += 1;if (vH > 1) vH -= 1;if (6.0 * vH < 1) return v1 + (v2 - v1) * 6.0 * vH;if (2.0 * vH < 1) return v2;if (3.0 * vH < 2) return v1 + (v2 - v1) * ((2.0 / 3.0) - vH) * 6.0;return (v1); }void RGB2HSL(QColor AColor, int &H, int &S, int &L) {double h, s, l;RGB2HSL(AColor, h, s, l);//H = RoundTo(h * 240, 0);//S = RoundTo(s * 240, 0);//L = RoundTo(l * 240, 0);H = qRound(h*240.0f);S = qRound(s*240.0f);L = qRound(l*240.0f); }QColor HSL2RGB(int H, int S, int L) {double h, s, l;h = H / 240.0;s = S / 240.0;l = L / 240.0;return HSL2RGB(h, s, l); }?
總結
以上是生活随笔為你收集整理的RGB与HSL、ESL转换的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux——DHCP篇
- 下一篇: 微信官方:微信圈子将停止运营