Skip to content

Commit c0b4669

Browse files
committed
vfx_core: fix color range error
1 parent 3ea6e4e commit c0b4669

File tree

2 files changed

+27
-20
lines changed

2 files changed

+27
-20
lines changed

main/inc/user/vfx.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -54,9 +54,9 @@ typedef struct {
5454
#define DEFAULT_VFX_SCALE_FACTOR 0xFF
5555

5656
#ifndef CONFIG_VFX_OUTPUT_CUBE0414
57-
#define DEFAULT_VFX_LIGHTNESS 0x00FF
57+
#define DEFAULT_VFX_LIGHTNESS 0x01FF
5858
#else
59-
#define DEFAULT_VFX_LIGHTNESS 0x006F
59+
#define DEFAULT_VFX_LIGHTNESS 0x00FF
6060
#endif
6161

6262
#define DEFAULT_VFX_BACKLIGHT 0xFF

main/src/user/vfx_core.c

+25-18
Original file line numberDiff line numberDiff line change
@@ -18,45 +18,52 @@
1818

1919
static float hue2rgb(float v1, float v2, float vH)
2020
{
21-
if (vH < 0) vH += 1.0;
22-
if (vH > 1) vH -= 1.0;
23-
24-
if (6.0 * vH < 1) return v1 + (v2 - v1) * 6.0 * vH;
25-
if (2.0 * vH < 1) return v2;
26-
if (3.0 * vH < 2) return v1 + (v2 - v1) * ((2.0 / 3.0) - vH) * 6.0;
21+
if (vH < 0.0) {
22+
vH += 1.0;
23+
} else if (vH > 1.0) {
24+
vH -= 1.0;
25+
}
2726

28-
return v1;
27+
if (6.0 * vH < 1.0) {
28+
return v1 + (v2 - v1) * 6.0 * vH;
29+
} else if (2.0 * vH < 1.0) {
30+
return v2;
31+
} else if (3.0 * vH < 2.0) {
32+
return v1 + (v2 - v1) * ((2.0 / 3.0) - vH) * 6.0;
33+
} else {
34+
return v1;
35+
}
2936
}
3037

3138
static uint32_t hsl2rgb(float H, float S, float L)
3239
{
40+
float v1, v2;
3341
uint8_t R, G, B;
34-
float var_1, var_2;
3542

3643
if (S == 0.0) {
37-
R = L * 255.0;
38-
G = L * 255.0;
39-
B = L * 255.0;
44+
R = 255.0 * L;
45+
G = 255.0 * L;
46+
B = 255.0 * L;
4047
} else {
4148
if (L < 0.5) {
42-
var_2 = L * (1 + S);
49+
v2 = L * (1.0 + S);
4350
} else {
44-
var_2 = (L + S) - (S * L);
51+
v2 = (L + S) - (L * S);
4552
}
4653

47-
var_1 = 2.0 * L - var_2;
54+
v1 = 2.0 * L - v2;
4855

49-
R = 255.0 * hue2rgb(var_1, var_2, H + (1.0 / 3.0));
50-
G = 255.0 * hue2rgb(var_1, var_2, H);
51-
B = 255.0 * hue2rgb(var_1, var_2, H - (1.0 / 3.0));
56+
R = 255.0 * hue2rgb(v1, v2, H + (1.0 / 3.0));
57+
G = 255.0 * hue2rgb(v1, v2, H);
58+
B = 255.0 * hue2rgb(v1, v2, H - (1.0 / 3.0));
5259
}
5360

5461
return (uint32_t)(R << 16 | G << 8 | B);
5562
}
5663

5764
uint32_t vfx_get_color(uint16_t color_h, uint16_t color_l)
5865
{
59-
return hsl2rgb(color_h / 511.0, 1.0, color_l / 511.0);
66+
return hsl2rgb(color_h / 511.0, 1.0, color_l / 2047.0);
6067
}
6168

6269
#ifndef CONFIG_SCREEN_PANEL_OUTPUT_VFX

0 commit comments

Comments
 (0)