Automation/src/util/color.h
Quantum 439051e52c
Initial Commit
Late as shit... as usual
2021-03-14 21:13:29 -04:00

48 lines
1.2 KiB
C++

#pragma once
class Color {
public:
Color() = default;
Color(int r, int g, int b) : m_r(r), m_g(g), m_b(b) {}
int r() { return m_r; }
int g() { return m_g; }
int b() { return m_b; }
void set_r(int r) { m_r = r; }
void set_g(int g) { m_g = g; }
void set_b(int b) { m_b = b; }
static Color from_hsv(int h, int s, int v) {
if(s == 0) {
return {v, v, v};
}
int region = h / 43;
int remainder = (h - region * 43) * 6;
int p = (v * (255 - s)) >> 8;
int q = (v * (255 - ((s * remainder) >> 8))) >> 8;
int t = (v * (255 - ((s * (255 - remainder)) >> 8))) >> 8;
switch(region) {
case 0:
return {v, t, p};
case 1:
return {q, v, p};
case 2:
return {p, v, t};
case 3:
return {p, q, v};
case 4:
return {t, p, v};
default:
return {v, p ,q};
}
}
private:
int m_r;
int m_g;
int m_b;
};