Skip to content

Commit 0bb0b7f

Browse files
committed
Custom palette gamma (fixes #126)
based on upstream wled@7f6486c
1 parent 7b87c27 commit 0bb0b7f

File tree

2 files changed

+9
-7
lines changed

2 files changed

+9
-7
lines changed

wled00/FX_fcn.cpp

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2273,30 +2273,32 @@ void WS2812FX::loadCustomPalettes() {
22732273

22742274
if (readObjectFromFile(fileName, nullptr, &pDoc)) {
22752275
JsonArray pal = pDoc[F("palette")];
2276-
if (!pal.isNull() && pal.size()>4) { // not an empty palette (at least 2 entries)
2276+
if (!pal.isNull() && pal.size()>3) { // not an empty palette (at least 2 entries)
22772277
if (pal[0].is<int>() && pal[1].is<const char *>()) {
22782278
// we have an array of index & hex strings
22792279
size_t palSize = min(pal.size(), (size_t)36); // WLEDMM use native min/max
22802280
palSize -= palSize % 2; // make sure size is multiple of 2
2281-
for (size_t i=0, j=0; i<palSize && pal[i].as<int>()<256; i+=2, j+=4) {
2281+
for (unsigned i=0, j=0; i<palSize && pal[i].as<int>()<256; i+=2, j+=4) {
22822282
uint8_t rgbw[] = {0,0,0,0};
22832283
tcp[ j ] = (uint8_t) pal[ i ].as<int>(); // index
22842284
colorFromHexString(rgbw, pal[i+1].as<const char *>()); // will catch non-string entires
2285-
for (size_t c=0; c<3; c++) tcp[j+1+c] = rgbw[c]; // only use RGB component
2285+
for (unsigned c=0; c<3; c++) tcp[j+1+c] = gamma8(rgbw[c]); // only use RGB component
22862286
DEBUG_PRINTF("%d(%d) : %d %d %d\n", i, int(tcp[j]), int(tcp[j+1]), int(tcp[j+2]), int(tcp[j+3]));
22872287
}
22882288
} else {
22892289
size_t palSize = min(pal.size(), (size_t)72); // WLEDMM use native min/max
22902290
palSize -= palSize % 4; // make sure size is multiple of 4
22912291
for (size_t i=0; i<palSize && pal[i].as<int>()<256; i+=4) {
22922292
tcp[ i ] = (uint8_t) pal[ i ].as<int>(); // index
2293-
tcp[i+1] = (uint8_t) pal[i+1].as<int>(); // R
2294-
tcp[i+2] = (uint8_t) pal[i+2].as<int>(); // G
2295-
tcp[i+3] = (uint8_t) pal[i+3].as<int>(); // B
2293+
tcp[i+1] = gamma8((uint8_t) pal[i+1].as<int>()); // R
2294+
tcp[i+2] = gamma8((uint8_t) pal[i+2].as<int>()); // G
2295+
tcp[i+3] = gamma8((uint8_t) pal[i+3].as<int>()); // B
22962296
DEBUG_PRINTF("%d(%d) : %d %d %d\n", i, int(tcp[i]), int(tcp[i+1]), int(tcp[i+2]), int(tcp[i+3]));
22972297
}
22982298
}
22992299
customPalettes.push_back(targetPalette.loadDynamicGradientPalette(tcp));
2300+
} else {
2301+
DEBUG_PRINTLN(F("Wrong palette format."));
23002302
}
23012303
}
23022304
} else {

wled00/wled.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
*/
99

1010
// version code in format yymmddb (b = daily build)
11-
#define VERSION 2404090
11+
#define VERSION 2404091
1212

1313
// WLEDMM - you can check for this define in usermods, to only enabled WLEDMM specific code in the "right" fork. Its not defined in AC WLED.
1414
#define _MoonModules_WLED_

0 commit comments

Comments
 (0)