FastLED 3.9.15
Loading...
Searching...
No Matches
crgb.cpp.hpp
Go to the documentation of this file.
1
3
4#define FASTLED_INTERNAL
5#include "crgb.h"
6#include "fl/system/fastled.h"
7#include "fl/math/xymap.h"
8
9#include "fl/gfx/upscale.h"
10#include "fl/gfx/downscale.h"
11#include "fl/math/math8.h"
12
13#include "fl/stl/int.h"
14
15
16
18 fl::string out;
19 out.append("CRGB(");
20 out.append(fl::i16(r));
21 out.append(",");
22 out.append(fl::i16(g));
23 out.append(",");
24 out.append(fl::i16(b));
25 out.append(")");
26 return out;
27}
28
30 const CRGB &colorTemperature) {
31#if defined(NO_CORRECTION) && (NO_CORRECTION == 1)
32 return CRGB(scale, scale, scale);
33#else
34 CRGB adj(0, 0, 0);
35 if (scale > 0) {
36 for (fl::u8 i = 0; i < 3; ++i) {
37 fl::u8 cc = colorCorrection.raw[i];
38 fl::u8 ct = colorTemperature.raw[i];
39 if (cc > 0 && ct > 0) {
40 // Optimized for AVR size. This function is only called very
41 // infrequently so size matters more than speed.
42 fl::u32 work = (((fl::u16)cc) + 1);
43 work *= (((fl::u16)ct) + 1);
44 work *= scale;
45 work /= 0x10000L;
46 adj.raw[i] = work & 0xFF;
47 }
48 }
49 }
50 return adj;
51#endif
52}
53
54CRGB CRGB::blend(const CRGB &p1, const CRGB &p2, fract8 amountOfP2) {
55 return CRGB(fl::blend8(p1.r, p2.r, amountOfP2), fl::blend8(p1.g, p2.g, amountOfP2),
56 fl::blend8(p1.b, p2.b, amountOfP2));
57}
58
59CRGB CRGB::blendAlphaMaxChannel(const CRGB &upper, const CRGB &lower) {
60 // Use luma of upper pixel as alpha (0..255)
61 fl::u8 max_component = 0;
62 for (int i = 0; i < 3; ++i) {
63 if (upper.raw[i] > max_component) {
64 max_component = upper.raw[i];
65 }
66 }
67 // uint8_t alpha = upper.getLuma();
68 // blend(lower, upper, alpha) → (lower * (255−alpha) + upper * alpha) / 256
69 fl::u8 amountOf2 = 255 - max_component;
70 return CRGB::blend(upper, lower, amountOf2);
71}
72
73void CRGB::downscale(const CRGB *src, const fl::XYMap &srcXY, CRGB *dst,
74 const fl::XYMap &dstXY) {
75 fl::downscale(src, srcXY, dst, dstXY);
76}
77
78void CRGB::upscale(const CRGB *src, const fl::XYMap &srcXY, CRGB *dst,
79 const fl::XYMap &dstXY) {
82 "Upscaling only works with a src matrix that is rectangular");
83 fl::u16 w = srcXY.getWidth();
84 fl::u16 h = srcXY.getHeight();
85 fl::upscale(src, dst, w, h, dstXY);
86}
87
89 nscale8x3(r, g, b, scaledown);
90 return *this;
91}
92
95 r = qadd8(r, rhs.r);
96 g = qadd8(g, rhs.g);
97 b = qadd8(b, rhs.b);
98 return *this;
99}
100
101CRGB CRGB::lerp8(const CRGB &other, fract8 amountOf2) const {
102 CRGB ret;
103
104 ret.r = lerp8by8(r, other.r, amountOf2);
105 ret.g = lerp8by8(g, other.g, amountOf2);
106 ret.b = lerp8by8(b, other.b, amountOf2);
107
108 return ret;
109}
110
112 nscale8x3(r, g, b, 255 - fadefactor);
113 return *this;
114}
115
fl::UISlider scale("Scale", 4,.1, 4,.1)
u16 getWidth() const FL_NOEXCEPT
u16 getHeight() const FL_NOEXCEPT
XyMapType getType() const FL_NOEXCEPT
@ kLineByLine
Definition xymap.h:43
string & append(const bitset_fixed< N > &bs) FL_NOEXCEPT
Definition string.h:284
Legacy header.
Legacy compatibility header for 8-bit math functions.
Internal FastLED header for implementation files.
LIB8STATIC fl::u8 lerp8by8(fl::u8 a, fl::u8 b, fract8 frac)
Linear interpolation between two unsigned 8-bit values, with 8-bit fraction.
Definition lib8tion.h:363
#define FL_WARN_IF(COND, MSG)
Definition log.h:277
unsigned char u8
Definition s16x16x4.h:132
u8 fract8
Fixed-Point Fractional Types.
Definition s16x16x4.h:161
void downscale(const CRGB *src, const XYMap &srcXY, CRGB *dst, const XYMap &dstXY)
void upscale(const CRGB *input, CRGB *output, u16 inputWidth, u16 inputHeight, const fl::XYMap &xyMap)
Definition upscale.h:56
CRGB & operator+=(const CRGB &rhs) FL_NOEXCEPT
Add one CRGB to another, saturating at 0xFF for each channel.
Definition crgb.cpp.hpp:94
static CRGB blend(const CRGB &p1, const CRGB &p2, fract8 amountOfP2) FL_NOEXCEPT
Definition crgb.cpp.hpp:54
static CRGB blendAlphaMaxChannel(const CRGB &upper, const CRGB &lower) FL_NOEXCEPT
Definition crgb.cpp.hpp:59
static CRGB computeAdjustment(u8 scale, const CRGB &colorCorrection, const CRGB &colorTemperature) FL_NOEXCEPT
Calculates the combined color adjustment to the LEDs at a given scale, color correction,...
Definition crgb.cpp.hpp:29
static void upscale(const CRGB *src, const XYMap &srcXY, CRGB *dst, const XYMap &dstXY) FL_NOEXCEPT
Definition crgb.cpp.hpp:78
CRGB & nscale8(u8 scaledown) FL_NOEXCEPT
Scale down a RGB to N/256ths of its current brightness, using "plain math" dimming rules.
Definition crgb.cpp.hpp:88
CRGB & fadeToBlackBy(u8 fadefactor) FL_NOEXCEPT
fadeToBlackBy is a synonym for nscale8(), as a fade instead of a scale
Definition crgb.cpp.hpp:111
static void downscale(const CRGB *src, const XYMap &srcXY, CRGB *dst, const XYMap &dstXY) FL_NOEXCEPT
Downscale a CRGB matrix (or strip) to the smaller size.
Definition crgb.cpp.hpp:73
string toString() const FL_NOEXCEPT
Definition crgb.cpp.hpp:17
FASTLED_FORCE_INLINE CRGB() FL_NOEXCEPT
Default constructor.
Definition crgb.h:111
CRGB lerp8(const CRGB &other, fract8 amountOf2) const FL_NOEXCEPT
Return a new CRGB object after performing a linear interpolation between this object and the passed i...
Definition crgb.cpp.hpp:101