FastLED 3.9.15
Loading...
Searching...
No Matches

◆ nblend()

CRGB & fl::nblend ( CRGB & existing,
const CRGB & overlay,
fract8 amountOfOverlay )
Examples
Pride2015.ino.

Definition at line 19 of file colorutils.cpp.

19 {
20 if (amountOfOverlay == 0) {
21 return existing;
22 }
23
24 if (amountOfOverlay == 255) {
25 existing = overlay;
26 return existing;
27 }
28
29#if 0
30 // Old blend method which unfortunately had some rounding errors
31 fract8 amountOfKeep = 255 - amountOfOverlay;
32
33 existing.red = scale8_LEAVING_R1_DIRTY( existing.red, amountOfKeep)
34 + scale8_LEAVING_R1_DIRTY( overlay.red, amountOfOverlay);
35 existing.green = scale8_LEAVING_R1_DIRTY( existing.green, amountOfKeep)
36 + scale8_LEAVING_R1_DIRTY( overlay.green, amountOfOverlay);
37 existing.blue = scale8_LEAVING_R1_DIRTY( existing.blue, amountOfKeep)
38 + scale8_LEAVING_R1_DIRTY( overlay.blue, amountOfOverlay);
39
40 cleanup_R1();
41#else
42 // Corrected blend method, with no loss-of-precision rounding errors
43 existing.red = blend8(existing.red, overlay.red, amountOfOverlay);
44 existing.green = blend8(existing.green, overlay.green, amountOfOverlay);
45 existing.blue = blend8(existing.blue, overlay.blue, amountOfOverlay);
46#endif
47
48 return existing;
49}
uint8_t fract8
ANSI: unsigned short _Fract.
Definition types.h:36
LIB8STATIC uint8_t blend8(uint8_t a, uint8_t b, uint8_t amountOfB)
Blend a variable proportion (0-255) of one byte to another.
Definition math8.h:667
LIB8STATIC_ALWAYS_INLINE void cleanup_R1()
Clean up the r1 register after a series of *LEAVING_R1_DIRTY calls.
Definition scale8.h:339
LIB8STATIC_ALWAYS_INLINE uint8_t scale8_LEAVING_R1_DIRTY(uint8_t i, fract8 scale)
This version of scale8() does not clean up the R1 register on AVR.
Definition scale8.h:176

Referenced by pride().

+ Here is the caller graph for this function: