9 const char* palette16code[16][2] = {
10 {
"30",
"40"}, {
"31",
"41"}, {
"32",
"42"}, {
"33",
"43"},
11 {
"34",
"44"}, {
"35",
"45"}, {
"36",
"46"}, {
"37",
"47"},
12 {
"90",
"100"}, {
"91",
"101"}, {
"92",
"102"}, {
"93",
"103"},
13 {
"94",
"104"}, {
"95",
"105"}, {
"96",
"106"}, {
"97",
"107"},
18 return red_ == rhs.red_ && green_ == rhs.green_ && blue_ == rhs.blue_ &&
28 case ColorType::Palette1:
29 return is_background_color ?
"49" :
"39";
31 case ColorType::Palette16:
32 return palette16code[index_][is_background_color];
34 case ColorType::Palette256:
35 return (is_background_color ?
"48;5;" :
"38;5;") +
std::to_string(index_);
37 case ColorType::TrueColor:
38 return (is_background_color ?
"48;2;" :
"38;2;")
63 type_ = ColorType::Palette16;
75 : type_(ColorType::
TrueColor), red_(red), green_(green), blue_(blue) {
79 int closest = 256 * 256 * 3;
81 for (
int i = 16; i < 256; ++i) {
83 int dr = color_info.
red - red;
84 int dg = color_info.
green - green;
85 int db = color_info.
blue - blue;
86 int dist = dr * dr + dg * dg + db * db;
94 type_ = ColorType::Palette256;
97 type_ = ColorType::Palette16;
111 return Color(red, green, blue);
124 return Color(v, v, v);
126 uint8_t region = h / 43;
127 uint8_t remainder = (h - (region * 43)) * 6;
128 uint8_t p = (v * (255 - s)) >> 8;
129 uint8_t q = (v * (255 - ((s * remainder) >> 8))) >> 8;
130 uint8_t t = (v * (255 - ((s * (255 - remainder)) >> 8))) >> 8;
134 case 0:
return Color(v,t,p);
135 case 1:
return Color(q,v,p);
136 case 2:
return Color(p,v,t);
137 case 3:
return Color(p,q,v);
138 case 4:
return Color(t,p,v);
139 case 5:
return Color(v,p,q);
143 return Color(0, 0, 0);