Bugfix in auto-white calculation.

pull/2737/head
Blaž Kristan 2021-10-27 08:17:51 +02:00
rodzic a696afaeb8
commit 757e8eb57c
1 zmienionych plików z 9 dodań i 15 usunięć

Wyświetl plik

@ -124,21 +124,15 @@ class Bus {
uint8_t _autoWhiteMode = 0;
uint32_t autoWhiteCalc(uint32_t c) {
switch (_autoWhiteMode) {
case RGBW_MODE_MANUAL_ONLY:
break;
default:
//white value is set to lowest RGB channel, thank you to @Def3nder!
uint8_t r = R(c);
uint8_t g = G(c);
uint8_t b = B(c);
uint8_t w = W(c);
if (_autoWhiteMode == RGBW_MODE_AUTO_BRIGHTER || w == 0) w = r < g ? (r < b ? r : b) : (g < b ? g : b);
if (_autoWhiteMode == RGBW_MODE_AUTO_ACCURATE) { r -= w; g -= w; b -= w; }
c = RGBW32(r, g, b, w);
break;
}
return c;
if (_autoWhiteMode == RGBW_MODE_MANUAL_ONLY) return c;
uint8_t r = R(c);
uint8_t g = G(c);
uint8_t b = B(c);
uint8_t w = W(c);
// ignore auto-white calculation if w>0 and mode DUAL (DUAL behaves as BRIGHTER if w==0)
if (!(w > 0 && _autoWhiteMode == RGBW_MODE_DUAL)) w = r < g ? (r < b ? r : b) : (g < b ? g : b);
if (_autoWhiteMode == RGBW_MODE_AUTO_ACCURATE) { r -= w; g -= w; b -= w; } // subtract w in ACCURATE mode
return RGBW32(r, g, b, w);
}
};