kopia lustrzana https://github.com/Aircoookie/WLED
bugfix & code formatting, removed color_scale
also replaced scale8_video with 32bit calculation in color_fade for consistency and speed.pull/3904/head
rodzic
459156fe57
commit
084fc2fcd1
|
@ -175,7 +175,7 @@ void IRAM_ATTR Segment::setPixelColorXY(int x, int y, uint32_t col)
|
|||
|
||||
uint8_t _bri_t = currentBri();
|
||||
if (_bri_t < 255) {
|
||||
col = color_scale(col, _bri_t);
|
||||
col = color_fade(col, _bri_t);
|
||||
}
|
||||
|
||||
if (reverse ) x = virtualWidth() - x - 1;
|
||||
|
@ -274,15 +274,13 @@ uint32_t IRAM_ATTR Segment::getPixelColorXY(int x, int y) {
|
|||
}
|
||||
|
||||
// blurRow: perform a blur on a row of a rectangular matrix
|
||||
void Segment::blurRow(uint32_t row, fract8 blur_amount, bool smear)
|
||||
{
|
||||
void Segment::blurRow(uint32_t row, fract8 blur_amount, bool smear){
|
||||
if (!isActive() || blur_amount == 0)
|
||||
return; // not active
|
||||
const uint_fast16_t cols = virtualWidth();
|
||||
const uint_fast16_t rows = virtualHeight();
|
||||
|
||||
if (row >= rows)
|
||||
return;
|
||||
if (row >= rows) return;
|
||||
// blur one row
|
||||
uint8_t keep = smear ? 255 : 255 - blur_amount;
|
||||
uint8_t seep = blur_amount >> 1;
|
||||
|
@ -292,8 +290,8 @@ void Segment::blurRow(uint32_t row, fract8 blur_amount, bool smear)
|
|||
uint32_t curnew;
|
||||
for (unsigned x = 0; x < cols; x++) {
|
||||
uint32_t cur = getPixelColorXY(x, row);
|
||||
uint32_t part = color_scale(cur, seep);
|
||||
curnew = color_scale(cur, keep);
|
||||
uint32_t part = color_fade(cur, seep);
|
||||
curnew = color_fade(cur, keep);
|
||||
if (x > 0) {
|
||||
if (carryover)
|
||||
curnew = color_add(curnew, carryover, true);
|
||||
|
@ -301,7 +299,7 @@ void Segment::blurRow(uint32_t row, fract8 blur_amount, bool smear)
|
|||
if (last != prev) // optimization: only set pixel if color has changed
|
||||
setPixelColorXY(x - 1, row, prev);
|
||||
}
|
||||
else // first pixel or last pixel
|
||||
else // first pixel
|
||||
setPixelColorXY(x, row, curnew);
|
||||
lastnew = curnew;
|
||||
last = cur; // save original value for comparison on next iteration
|
||||
|
@ -326,8 +324,8 @@ void Segment::blurCol(uint32_t col, fract8 blur_amount, bool smear) {
|
|||
uint32_t curnew;
|
||||
for (unsigned y = 0; y < rows; y++) {
|
||||
uint32_t cur = getPixelColorXY(col, y);
|
||||
uint32_t part = color_scale(cur, seep);
|
||||
curnew = color_scale(cur, keep);
|
||||
uint32_t part = color_fade(cur, seep);
|
||||
curnew = color_fade(cur, keep);
|
||||
if (y > 0) {
|
||||
if (carryover)
|
||||
curnew = color_add(curnew, carryover, true);
|
||||
|
|
|
@ -735,7 +735,7 @@ void IRAM_ATTR Segment::setPixelColor(int i, uint32_t col)
|
|||
uint16_t len = length();
|
||||
uint8_t _bri_t = currentBri();
|
||||
if (_bri_t < 255) {
|
||||
col = color_scale(col, _bri_t);
|
||||
col = color_fade(col, _bri_t);
|
||||
}
|
||||
|
||||
// expand pixel (taking into account start, grouping, spacing [and offset])
|
||||
|
@ -1003,7 +1003,7 @@ void Segment::blur(uint8_t blur_amount, bool smear) {
|
|||
return;
|
||||
}
|
||||
#endif
|
||||
uint8_t keep = smear ? 250 : 255 - blur_amount;
|
||||
uint8_t keep = smear ? 255 : 255 - blur_amount;
|
||||
uint8_t seep = blur_amount >> 1;
|
||||
unsigned vlength = virtualLength();
|
||||
uint32_t carryover = BLACK;
|
||||
|
@ -1012,10 +1012,9 @@ void Segment::blur(uint8_t blur_amount, bool smear) {
|
|||
uint32_t curnew;
|
||||
for (unsigned i = 0; i < vlength; i++) {
|
||||
uint32_t cur = getPixelColor(i);
|
||||
uint32_t part = color_scale(cur, seep);
|
||||
curnew = color_scale(cur, keep);
|
||||
if (i > 0)
|
||||
{
|
||||
uint32_t part = color_fade(cur, seep);
|
||||
curnew = color_fade(cur, keep);
|
||||
if (i > 0) {
|
||||
if (carryover)
|
||||
curnew = color_add(curnew, carryover, true);
|
||||
uint32_t prev = color_add(lastnew, part, true);
|
||||
|
|
|
@ -61,21 +61,6 @@ uint32_t color_add(uint32_t c1, uint32_t c2, bool fast)
|
|||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* color scale function that replaces scale8 for 32bit colors
|
||||
*/
|
||||
|
||||
uint32_t color_scale(uint32_t c1, uint8_t scale)
|
||||
{
|
||||
uint32_t fixedscale = 1 + scale;
|
||||
uint32_t scaledcolor; //color order is: W R G B from MSB to LSB
|
||||
scaledcolor = ((R(c1) * fixedscale) >> 8) << 16;
|
||||
scaledcolor |= ((G(c1) * fixedscale) >> 8) << 8;
|
||||
scaledcolor |= (B(c1) * fixedscale) >> 8;
|
||||
scaledcolor |= ((W(c1) * fixedscale) >> 8) << 24;
|
||||
return scaledcolor;
|
||||
}
|
||||
|
||||
/*
|
||||
* fades color toward black
|
||||
* if using "video" method the resulting color will never become black unless it is already black
|
||||
|
@ -83,17 +68,26 @@ uint32_t color_scale(uint32_t c1, uint8_t scale)
|
|||
|
||||
uint32_t color_fade(uint32_t c1, uint8_t amount, bool video)
|
||||
{
|
||||
if (video)
|
||||
{
|
||||
uint8_t r = scale8_video(R(c1), amount);
|
||||
uint8_t g = scale8_video(G(c1), amount);
|
||||
uint8_t b = scale8_video(B(c1), amount);
|
||||
uint8_t w = scale8_video(W(c1), amount);
|
||||
return RGBW32(r, g, b, w);
|
||||
uint32_t scaledcolor; // color order is: W R G B from MSB to LSB
|
||||
uint32_t r = R(c1);
|
||||
uint32_t g = G(c1);
|
||||
uint32_t b = B(c1);
|
||||
uint32_t w = W(c1);
|
||||
if (video) {
|
||||
uint32_t scale = amount; // 32bit for faster calculation
|
||||
scaledcolor = (((r * scale) >> 8) << 16) + ((r && scale) ? 1 : 0);
|
||||
scaledcolor |= (((g * scale) >> 8) << 8) + ((g && scale) ? 1 : 0);
|
||||
scaledcolor |= ((b * scale) >> 8) + ((b && scale) ? 1 : 0);
|
||||
scaledcolor |= (((w * scale) >> 8) << 24) + ((w && scale) ? 1 : 0);
|
||||
return scaledcolor;
|
||||
}
|
||||
else
|
||||
{
|
||||
return color_scale(c1, amount);
|
||||
else {
|
||||
uint32_t scale = 1 + amount;
|
||||
scaledcolor = ((r * scale) >> 8) << 16;
|
||||
scaledcolor |= ((g * scale) >> 8) << 8;
|
||||
scaledcolor |= (b * scale) >> 8;
|
||||
scaledcolor |= ((w * scale) >> 8) << 24;
|
||||
return scaledcolor;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -80,7 +80,6 @@ class NeoGammaWLEDMethod {
|
|||
#define gamma8(c) NeoGammaWLEDMethod::rawGamma8(c)
|
||||
uint32_t color_blend(uint32_t,uint32_t,uint16_t,bool b16=false);
|
||||
uint32_t color_add(uint32_t,uint32_t, bool fast=false);
|
||||
uint32_t color_scale(uint32_t c1, uint8_t scale);
|
||||
uint32_t color_fade(uint32_t c1, uint8_t amount, bool video=false);
|
||||
CRGBPalette16 generateHarmonicRandomPalette(CRGBPalette16 &basepalette);
|
||||
CRGBPalette16 generateRandomPalette(void);
|
||||
|
|
Ładowanie…
Reference in New Issue