35 if(color >= HSI_H_STEPS * HSI_SI_VALUES)
38 float loc1 = 0, loc2 = 0, loc3 = 0;
39 if(color % HSI_H_STEPS != 0) {
40 loc1 = color % HSI_H_STEPS * 1.0 / 18.0;
44 switch(
static_cast<int>(color / HSI_H_STEPS)) {
77 loc3 = 1 -
static_cast<float>(color) / HSI_H_STEPS /
static_cast<float>(HSI_SI_VALUES);
81 return Color(0, 0, 0);
84 const int loc7 =
static_cast<int>(loc3 * 255);
85 return Color(loc7, loc7, loc7);
88 float red = 0, green = 0, blue = 0;
90 if(loc1 < 1.0 / 6.0) {
92 blue = loc3 * (1 - loc2);
93 green = blue + (loc3 - blue) * 6 * loc1;
94 }
else if(loc1 < 2.0 / 6.0) {
96 blue = loc3 * (1 - loc2);
97 red = green - (loc3 - blue) * (6 * loc1 - 1);
98 }
else if(loc1 < 3.0 / 6.0) {
100 red = loc3 * (1 - loc2);
101 blue = red + (loc3 - red) * (6 * loc1 - 2);
102 }
else if(loc1 < 4.0 / 6.0) {
104 red = loc3 * (1 - loc2);
105 green = blue - (loc3 - red) * (6 * loc1 - 3);
106 }
else if(loc1 < 5.0 / 6.0) {
108 green = loc3 * (1 - loc2);
109 red = green + (loc3 - green) * (6 * loc1 - 4);
112 green = loc3 * (1 - loc2);
113 blue = red - (loc3 - green) * (6 * loc1 - 5);
115 return Color(
static_cast<int>(red * 255),
static_cast<int>(green * 255),
static_cast<int>(blue * 255));