mirror of https://github.com/AxioDL/zeus.git
Add HSL to CColor
This commit is contained in:
parent
40ca0c3219
commit
12631bdc60
|
@ -254,6 +254,68 @@ public:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
float hueToRgb(float p, float q, float t)
|
||||||
|
{
|
||||||
|
if (t < 0.0f)
|
||||||
|
t += 1.0f;
|
||||||
|
if (t > 1.0f)
|
||||||
|
t -= 1.0f;
|
||||||
|
if (t < 1.f/6.f)
|
||||||
|
return p + (q - p) * 6.f * t;
|
||||||
|
if (t < 1.f/2.f)
|
||||||
|
return q;
|
||||||
|
if (t < 2.f/3.f)
|
||||||
|
return p + (q - p) * (2.f/3.f - t) * 6.f;
|
||||||
|
return p;
|
||||||
|
}
|
||||||
|
|
||||||
|
void fromHSL(float h, float s, float l, float _a = 1.0)
|
||||||
|
{
|
||||||
|
float _r, _g, _b;
|
||||||
|
|
||||||
|
if (s == 0.0f)
|
||||||
|
r = g = b = l;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
const float q = l < 0.5f ? l * (1.f + s) : l + s - 1.f * s;
|
||||||
|
const float p = 2 * l - q;
|
||||||
|
_r = hueToRgb(p, q, h + 1.f/3);
|
||||||
|
_g = hueToRgb(p, q, h);
|
||||||
|
_b = hueToRgb(p, q, h - 1.f/3);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
r = _r * 255.f;
|
||||||
|
g = _g * 255.f;
|
||||||
|
b = _b * 255.f;
|
||||||
|
a = _a * 255.f;
|
||||||
|
}
|
||||||
|
|
||||||
|
void toHSL(float& h, float& s, float& l)
|
||||||
|
{
|
||||||
|
const float rf = r / 255.f;
|
||||||
|
const float gf = g / 255.f;
|
||||||
|
const float bf = b / 255.f;
|
||||||
|
const float min = Math::min(rf, Math::min(gf, bf));
|
||||||
|
const float max = Math::max(rf, Math::max(gf, bf));
|
||||||
|
const float d = max - min;
|
||||||
|
|
||||||
|
if (max == min)
|
||||||
|
h = s = 0;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
s = l > 0.5f ? d / (2.f - max - min) : d / (max + min);
|
||||||
|
if (max == rf)
|
||||||
|
h = (gf - bf) / d + (gf < bf ? 6.f : 0.f);
|
||||||
|
else if (max == gf)
|
||||||
|
h = (bf - rf) / d + 2.f;
|
||||||
|
else if (max = bf)
|
||||||
|
h = (rf - gf) / d + 4.f;
|
||||||
|
|
||||||
|
h /= 6;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void fromRGBA32(unsigned int rgba)
|
void fromRGBA32(unsigned int rgba)
|
||||||
{ this->rgba = COLOR(rgba); }
|
{ this->rgba = COLOR(rgba); }
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue