const RGBColor RGBColor::White(255, 255, 255);
const RGBColor RGBColor::Gray(128, 128, 128);
const RGBColor RGBColor::Red(255, 0, 0);
const RGBColor RGBColor::Green(0, 255, 0);
const RGBColor RGBColor::Blue(0, 0, 255);
const RGBColor RGBColor::Yellow(255, 255, 0);
const RGBColor RGBColor::Magenta(255, 0, 255);
const RGBColor RGBColor::Cyan(0, 255, 255);
const RGBColor RGBColor::Black(0, 0, 0);
const RGBColor RGBColor::Orange(255, 91, 0);
const RGBColor RGBColor::Purple(111, 49, 152);
RGBColor::RGBColor()
{
}
RGBColor::RGBColor(BYTE _r, BYTE _g, BYTE _b)
{
r = _r;
g = _g;
b = _b;
a = 0;
}
RGBColor::RGBColor(BYTE _r, BYTE _g, BYTE _b, BYTE _a)
{
r = _r;
g = _g;
b = _b;
a = _a;
}
RGBColor::RGBColor(const Vec3f &V)
{
r = Utility::BoundToByte(V.x * 255.0f);
g = Utility::BoundToByte(V.y * 255.0f);
b = Utility::BoundToByte(V.z * 255.0f);
}
RGBColor::RGBColor(const Vec4f &V)
{
r = Utility::BoundToByte(V.x * 255.0f);
g = Utility::BoundToByte(V.y * 255.0f);
b = Utility::BoundToByte(V.z * 255.0f);
a = Utility::BoundToByte(V.w * 255.0f);
}
#ifdef USE_D3D
RGBColor::operator D3DCOLOR()
{
return D3DCOLOR_RGBA(r, g, b, a);
}
#endif
RGBColor RGBColor::Interpolate(RGBColor L, RGBColor R, float s)
{
return RGBColor(Utility::BoundToByte(int(int(L.r) + s * float(int(R.r) - int(L.r)))),
Utility::BoundToByte(int(int(L.g) + s * float(int(R.g) - int(L.g)))),
Utility::BoundToByte(int(int(L.b) + s * float(int(R.b) - int(L.b)))),
Utility::BoundToByte(int(int(L.a) + s * float(int(R.a) - int(L.a)))));
}
String RGBColor::CommaSeparatedString() const
{
return String("(") +
String(int(r)) + String(", ") +
String(int(g)) + String(", ") +
String(int(b)) +
String(")");
}
RGBColor RGBColor::RGBToHSV() const
{
double maxC = b;
if (maxC < g) maxC = g;
if (maxC < r) maxC = r;
double minC = b;
if (minC > g) minC = g;
if (minC > r) minC = r;
double delta = maxC - minC;
double V = maxC;
double S = 0;
double H = 0;
if (delta == 0)
{
H = 0;
S = 0;
}
else
{
S = delta / maxC;
double dR = 60*(maxC - r)/delta + 180;
double dG = 60*(maxC - g)/delta + 180;
double dB = 60*(maxC - b)/delta + 180;
if (r == maxC)
H = dB - dG;
else if (g == maxC)
H = 120 + dR - dB;
else
H = 240 + dG - dR;
}
if (H<0)
H+=360;
if (H>=360)
H-=360;
return RGBColor(Utility::BoundToByte(H / 360.0f * 255.0f), Utility::BoundToByte(S * 255.0f), Utility::BoundToByte(V * 255.0f));
}
#ifdef USE_D3D
D3DCOLORVALUE MakeColor(float r, float g, float b, float a)
{
D3DCOLORVALUE C;
C.r = r;
C.g = g;
C.b = b;
C.a = a;
return C;
}
#endif