76 return Color{ (uint32_t)((uint32_t)r << 16) | (uint32_t)((uint32_t)g << 8) | (uint32_t)b };
82 return Color{ v & 0x00FFFFFFu };
90 (uint8_t)(((v >> 11) & 0x1F) * 255u / 31u),
91 (uint8_t)(((v >> 5) & 0x3F) * 255u / 63u),
92 (uint8_t)(( v & 0x1F) * 255u / 31u));
99 (uint8_t)(((v >> 5) & 0x07) * 255u / 7u),
100 (uint8_t)(((v >> 2) & 0x07) * 255u / 7u),
101 (uint8_t)(( v & 0x03) * 255u / 3u));
108 (uint8_t)(((v & 0x0F) * 255u) / 15u),
109 (uint8_t)(((v & 0x0F) * 255u) / 15u),
110 (uint8_t)(((v & 0x0F) * 255u) / 15u));
120 constexpr uint8_t
r()
const {
return (uint8_t)((rgb >> 16) & 0xFFu); }
122 constexpr uint8_t
g()
const {
return (uint8_t)((rgb >> 8) & 0xFFu); }
124 constexpr uint8_t
b()
const {
return (uint8_t)(rgb & 0xFFu); }
127 constexpr uint32_t
to_rgb888()
const {
return rgb & 0x00FFFFFFu; }
132 return (uint16_t)(((rgb >> 8) & 0xF800u) |
133 ((rgb >> 5) & 0x07E0u) |
134 ((rgb >> 3) & 0x001Fu));
140 return (uint8_t)(((rgb >> 16) & 0xE0u) |
141 ((rgb >> 11) & 0x1Cu) |
142 ((rgb >> 6) & 0x03u));
152 return (uint8_t)((((uint32_t)
r() * 77u +
153 (uint32_t)
g() * 150u +
154 (uint32_t)
b() * 29u) >> 8) >> 4);
160 return (((uint32_t)
r() * 77u +
161 (uint32_t)
g() * 150u +
162 (uint32_t)
b() * 29u) >= (128u * 256u)) ? 1u : 0u;
168 template <
unsigned Bpp>
172 constexpr
bool operator!=(
const Color &other)
const {
return !(*
this == other); }
175 template <> constexpr uint32_t Color::to_native<1>()
const {
return to_mono(); }
176 template <> constexpr uint32_t Color::to_native<4>()
const {
return to_gray4(); }
177 template <> constexpr uint32_t Color::to_native<8>()
const {
return to_rgb332(); }
178 template <> constexpr uint32_t Color::to_native<16>()
const {
return to_rgb565(); }
179 template <> constexpr uint32_t Color::to_native<24>()
const {
return to_rgb888(); }
static constexpr Color from_rgb(uint8_t r, uint8_t g, uint8_t b)
Construct from 8-bit-per-channel RGB.
static constexpr Color from_rgb565(uint16_t v)
Construct from a 5-6-5 packed 16-bit value, expanding back to RGB888.
constexpr uint32_t to_native() const
Compile-time-selectable convert: to_native<bpp>().
constexpr uint8_t r() const
Red channel (0..255).
constexpr uint16_t to_rgb565() const
Pack as 5-6-5 RGB565 (matches RGB_COLOR16 macro for matching inputs).
constexpr uint32_t to_rgb888() const
Pack as 24-bit RGB888 (0x00RRGGBB).
constexpr uint8_t b() const
Blue channel (0..255).
static constexpr Color from_rgb888(uint32_t v)
Construct from a 24-bit packed value (e.g.
static constexpr Color from_gray4(uint8_t v)
Construct from a 4-bit luminance (0..15) — broadcasts to all channels.
static constexpr Color from_rgb332(uint8_t v)
Construct from a 3-3-2 packed 8-bit value, expanding back to RGB888.
24-bit RGB colour with constexpr conversions to all native lcdgfx pixel formats.
constexpr uint8_t to_gray4() const
Pack as 4-bit luminance using the standard 0.299R + 0.587G + 0.114B weighting, rounded to 4 bits...
uint32_t rgb
0x00RRGGBB (R in bits 23..16, G in bits 15..8, B in bits 7..0).
constexpr uint8_t g() const
Green channel (0..255).
constexpr uint8_t to_mono() const
Reduce to 1 bit (0 or 1).
static constexpr Color from_mono(uint8_t v)
Construct from a 1-bit value (0 = black, anything else = white).
constexpr uint8_t to_rgb332() const
Pack as 3-3-2 RGB332 (matches RGB_COLOR8 macro for matching inputs).