Converts RGB to RGBW with a boosted white channel.
81 {
82 (void)w_color_temperature;
86 uint8_t min_component =
min3(r, g, b);
87 uint8_t w;
88 bool is_min = true;
89 if (min_component <= 84) {
90 w = 3 * min_component;
91 } else {
92 w = 255;
93 is_min = false;
94 }
95 uint8_t r_prime;
96 uint8_t g_prime;
97 uint8_t b_prime;
98 if (is_min) {
99 r_prime = r - min_component;
100 g_prime = g - min_component;
101 b_prime = b - min_component;
102 } else {
104 r_prime = r - w3;
105 g_prime = g - w3;
106 b_prime = b - w3;
107 }
108
109 *out_r = r_prime;
110 *out_g = g_prime;
111 *out_b = b_prime;
112 *out_w = w;
113}
LIB8STATIC_ALWAYS_INLINE uint8_t scale8(uint8_t i, fract8 scale)
Scale one byte by a second one, which is treated as the numerator of a fraction whose denominator is ...
uint8_t min3(uint8_t a, uint8_t b, uint8_t c)
uint8_t divide_by_3(uint8_t x)