@@ -47,77 +47,6 @@ void relativeChangeWhite(int8_t amount, byte lowerBoundary)
4747 col[3 ] = new_val;
4848}
4949
50- void colorHSVtoRGB (float hue, float saturation, float value, byte& red, byte& green, byte& blue)
51- {
52- float r, g, b;
53-
54- auto i = static_cast <int >(hue * 6 );
55- auto f = hue * 6 - i;
56- auto p = value * (1 - saturation);
57- auto q = value * (1 - f * saturation);
58- auto t = value * (1 - (1 - f) * saturation);
59-
60- switch (i % 6 )
61- {
62- case 0 : r = value, g = t, b = p;
63- break ;
64- case 1 : r = q, g = value, b = p;
65- break ;
66- case 2 : r = p, g = value, b = t;
67- break ;
68- case 3 : r = p, g = q, b = value;
69- break ;
70- case 4 : r = t, g = p, b = value;
71- break ;
72- case 5 : r = value, g = p, b = q;
73- break ;
74- }
75-
76- red = static_cast <uint8_t >(r * 255 );
77- green = static_cast <uint8_t >(g * 255 );
78- blue = static_cast <uint8_t >(b * 255 );
79- }
80-
81- void colorRGBtoHSV (byte red, byte green, byte blue, float & hue, float & saturation, float & value)
82- {
83- auto rd = static_cast <float >(red) / 255 ;
84- auto gd = static_cast <float >(green) / 255 ;
85- auto bd = static_cast <float >(blue) / 255 ;
86- auto max = std::max ({ rd, gd, bd }), min = std::min ({ rd, gd, bd });
87-
88- value = max;
89-
90- auto d = max - min;
91- saturation = max == 0 ? 0 : d / max;
92-
93- hue = 0 ;
94- if (max != min)
95- {
96- if (max == rd) hue = (gd - bd) / d + (gd < bd ? 6 : 0 );
97- else if (max == gd) hue = (bd - rd) / d + 2 ;
98- else if (max == bd) hue = (rd - gd) / d + 4 ;
99- hue /= 6 ;
100- }
101- }
102-
103- #define SATURATION_THRESHOLD 0.1
104- #define MAX_HSV_VALUE 1
105- #define MAX_HSV_SATURATION 1
106-
107- // corrects the realtime colors. 10 is the unchanged saturation/value
108- // this feature might cause slowdowns with large LED counts
109- void correctColors (byte r, byte g, byte b, byte* rgb) {
110- float hsv[3 ] = { 0 ,0 ,0 };
111- colorRGBtoHSV (r, g,b , hsv[0 ], hsv[1 ], hsv[2 ]);
112- float saturated = hsv[1 ] > SATURATION_THRESHOLD ?
113- hsv[1 ] * ((float )liveHSVSaturation / 10 ) : hsv[1 ];
114- float saturation = saturated < MAX_HSV_SATURATION ? saturated : MAX_HSV_SATURATION;
115-
116- float valued = hsv[2 ] * ((float )liveHSVValue/10 );
117- float value = valued < MAX_HSV_VALUE ? valued : MAX_HSV_VALUE;
118- colorHSVtoRGB (hsv[0 ], saturation, value, rgb[0 ], rgb[1 ], rgb[2 ]);
119- }
120-
12150void colorHStoRGB (uint16_t hue, byte sat, byte* rgb) // hue, sat to rgb
12251{
12352 float h = ((float )hue)/65535.0 ;
0 commit comments