@@ -214,7 +214,7 @@ uint32_t WS2812FX::getPixelColorXY(uint16_t x, uint16_t y) {
214214void IRAM_ATTR_YN Segment::setPixelColorXY (int x, int y, uint32_t col) // WLEDMM: IRAM_ATTR conditionally
215215{
216216 if (Segment::maxHeight==1 ) return ; // not a matrix set-up
217- if (x >= virtualWidth () || y >= virtualHeight () || x< 0 || y< 0 ) return ; // if pixel would fall out of virtual segment just exit
217+ if (x< 0 || y< 0 || x >= virtualWidth () || y >= virtualHeight ()) return ; // if pixel would fall out of virtual segment just exit
218218
219219 if (ledsrgb) ledsrgb[XY (x,y)] = col;
220220
@@ -307,7 +307,7 @@ void Segment::setPixelColorXY(float x, float y, uint32_t col, bool aa, bool fast
307307
308308// returns RGBW values of pixel
309309uint32_t IRAM_ATTR_YN Segment::getPixelColorXY (int x, int y) {
310- if (!isActive ()) return 0 ; // not active
310+ if (x< 0 || y< 0 || !isActive ()) return 0 ; // not active or out-of range
311311 int i = XY (x,y);
312312 if (ledsrgb) return RGBW32 (ledsrgb[i].r , ledsrgb[i].g , ledsrgb[i].b , 0 );
313313 if (reverse ) x = virtualWidth () - x - 1 ;
@@ -353,7 +353,7 @@ void Segment::fadePixelColorXY(uint16_t x, uint16_t y, uint8_t fade) {
353353
354354// blurRow: perform a blur on a row of a rectangular matrix
355355void Segment::blurRow (uint32_t row, fract8 blur_amount, bool smear){
356- if (!isActive () || blur_amount == 0 ) return ; // not active
356+ if (!isActive ()) return ; // not active
357357 const uint_fast16_t cols = virtualWidth ();
358358 const uint_fast16_t rows = virtualHeight ();
359359
@@ -364,30 +364,30 @@ void Segment::blurRow(uint32_t row, fract8 blur_amount, bool smear){
364364 uint32_t carryover = BLACK;
365365 uint32_t lastnew;
366366 uint32_t last;
367- uint32_t curnew;
367+ uint32_t curnew = 0 ;
368368 for (unsigned x = 0 ; x < cols; x++) {
369369 uint32_t cur = getPixelColorXY (x, row);
370370 uint32_t part = color_fade (cur, seep);
371371 curnew = color_fade (cur, keep);
372372 if (x > 0 ) {
373373 if (carryover)
374- curnew = color_add (curnew, carryover, true );
375- uint32_t prev = color_add (lastnew, part, true );
374+ curnew = color_add (curnew, carryover, !smear); // WLEDMM don't use "fast" when smear==true (better handling of bright colors)
375+ uint32_t prev = color_add (lastnew, part, !smear); // WLEDMM
376376 if (last != prev) // optimization: only set pixel if color has changed
377- setPixelColorXY (x - 1 , row, prev);
377+ setPixelColorXY (int ( x - 1 ), int ( row) , prev);
378378 }
379379 else // first pixel
380- setPixelColorXY (x, row, curnew);
380+ setPixelColorXY (int (x), int ( row) , curnew);
381381 lastnew = curnew;
382382 last = cur; // save original value for comparison on next iteration
383383 carryover = part;
384384 }
385- setPixelColorXY (cols-1 , row, curnew); // set last pixel
385+ setPixelColorXY (int ( cols-1 ), int ( row) , curnew); // set last pixel
386386}
387387
388388// blurCol: perform a blur on a column of a rectangular matrix
389389void Segment::blurCol (uint32_t col, fract8 blur_amount, bool smear) {
390- if (!isActive () || blur_amount == 0 ) return ; // not active
390+ if (!isActive ()) return ; // not active
391391 const uint_fast16_t cols = virtualWidth ();
392392 const uint_fast16_t rows = virtualHeight ();
393393
@@ -398,25 +398,25 @@ void Segment::blurCol(uint32_t col, fract8 blur_amount, bool smear) {
398398 uint32_t carryover = BLACK;
399399 uint32_t lastnew;
400400 uint32_t last;
401- uint32_t curnew;
401+ uint32_t curnew = 0 ;
402402 for (unsigned y = 0 ; y < rows; y++) {
403403 uint32_t cur = getPixelColorXY (col, y);
404404 uint32_t part = color_fade (cur, seep);
405405 curnew = color_fade (cur, keep);
406406 if (y > 0 ) {
407407 if (carryover)
408- curnew = color_add (curnew, carryover, true );
409- uint32_t prev = color_add (lastnew, part, true );
408+ curnew = color_add (curnew, carryover, !smear); // WLEDMM don't use "fast" when smear==true (better handling of bright colors)
409+ uint32_t prev = color_add (lastnew, part, !smear ); // WLEDMM
410410 if (last != prev) // optimization: only set pixel if color has changed
411- setPixelColorXY (col, y - 1 , prev);
411+ setPixelColorXY (int ( col), int ( y - 1 ) , prev);
412412 }
413413 else // first pixel
414- setPixelColorXY (col, y , curnew);
414+ setPixelColorXY (int ( col), int (y) , curnew);
415415 lastnew = curnew;
416416 last = cur; // save original value for comparison on next iteration
417417 carryover = part;
418418 }
419- setPixelColorXY (col, rows - 1 , curnew);
419+ setPixelColorXY (int ( col), int ( rows - 1 ) , curnew);
420420}
421421
422422// 1D Box blur (with added weight - blur_amount: [0=no blur, 255=max blur])
0 commit comments