fix: revert changes to hsb_to_rgb
This commit is contained in:
parent
dddb9e7042
commit
20ad9ea98d
1 changed files with 29 additions and 37 deletions
|
@ -68,60 +68,52 @@ static struct zmk_led_hsb hsb_scale_zero_max(struct zmk_led_hsb hsb) {
|
||||||
return hsb;
|
return hsb;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Conversion algorithm taken from https://en.wikipedia.org/wiki/HSL_and_HSV#HSV_to_RGB
|
|
||||||
static struct led_rgb hsb_to_rgb(struct zmk_led_hsb hsb) {
|
static struct led_rgb hsb_to_rgb(struct zmk_led_hsb hsb) {
|
||||||
struct led_rgb rgb;
|
double r, g, b;
|
||||||
|
|
||||||
uint32_t from_h = hsb.h;
|
uint8_t i = hsb.h / 60;
|
||||||
uint32_t from_s = hsb.s;
|
double v = hsb.b / ((float)BRT_MAX);
|
||||||
uint32_t from_b = hsb.b;
|
double s = hsb.s / ((float)SAT_MAX);
|
||||||
|
double f = hsb.h / ((float)HUE_MAX) * 6 - i;
|
||||||
|
double p = v * (1 - s);
|
||||||
|
double q = v * (1 - f * s);
|
||||||
|
double t = v * (1 - (1 - f) * s);
|
||||||
|
|
||||||
// Scale brightness from [0-100] to [0-255]
|
switch (i % 6) {
|
||||||
uint32_t max_brightness = from_b * 2.55f;
|
|
||||||
uint32_t min_brightness = from_b * (100 - from_s) * 0.0255f;
|
|
||||||
|
|
||||||
uint32_t sector = from_h / 60;
|
|
||||||
uint32_t distance_into_sector = sector % 60;
|
|
||||||
uint32_t offset = (max_brightness - min_brightness) * distance_into_sector / 60;
|
|
||||||
|
|
||||||
switch (sector) {
|
|
||||||
case 0:
|
case 0:
|
||||||
rgb.r = max_brightness;
|
r = v;
|
||||||
rgb.g = min_brightness + offset;
|
g = t;
|
||||||
rgb.b = min_brightness;
|
b = p;
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
rgb.r = max_brightness - offset;
|
r = q;
|
||||||
rgb.g = max_brightness;
|
g = v;
|
||||||
rgb.b = min_brightness;
|
b = p;
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
rgb.r = min_brightness;
|
r = p;
|
||||||
rgb.g = max_brightness;
|
g = v;
|
||||||
rgb.b = min_brightness + offset;
|
b = t;
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
rgb.r = min_brightness;
|
r = p;
|
||||||
rgb.g = max_brightness - offset;
|
g = q;
|
||||||
rgb.b = max_brightness;
|
b = v;
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
rgb.r = min_brightness + offset;
|
r = t;
|
||||||
rgb.g = min_brightness;
|
g = p;
|
||||||
rgb.b = max_brightness;
|
b = v;
|
||||||
break;
|
break;
|
||||||
case 5:
|
case 5:
|
||||||
rgb.r = max_brightness;
|
r = v;
|
||||||
rgb.g = min_brightness;
|
g = p;
|
||||||
rgb.b = max_brightness - offset;
|
b = q;
|
||||||
break;
|
|
||||||
default:
|
|
||||||
rgb.r = 0;
|
|
||||||
rgb.g = 0;
|
|
||||||
rgb.b = 0;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct led_rgb rgb = {r : r * 255, g : g * 255, b : b * 255};
|
||||||
|
|
||||||
return rgb;
|
return rgb;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue