5#ifndef MODES_PALETTES_H
6#define MODES_PALETTES_H
470template<u
int32_t startColor, u
int32_t endColor>
static constexpr PaletteTy _gradient_palette_from_color()
473 constexpr ToRGB start {startColor};
474 constexpr ToRGB end {endColor};
477 constexpr float step = palette.size() - 1;
478 constexpr float dr = (end.r - start.r) / step;
479 constexpr float dg = (end.g - start.g) / step;
480 constexpr float db = (end.b - start.b) / step;
482 for (
size_t I = 0; I < palette.size(); ++I)
484 uint8_t r = start.r + (I * dr);
485 uint8_t g = start.g + (I * dg);
486 uint8_t b = start.b + (I * db);
495 _gradient_palette_from_color<startColor, endColor>();
503template<
bool PaletteLoops = true,
typename UIntTy = u
int8_t>
506 static_assert(std::is_same_v<UIntTy, uint8_t> || std::is_same_v<UIntTy, uint16_t>,
"u8 or u16 allowed only");
508 uint8_t paletteIndex;
509 uint16_t nextBlendWeight;
511 if constexpr (std::is_same_v<UIntTy, uint8_t>)
513 paletteIndex =
static_cast<uint8_t
>(index >> 4);
515 nextBlendWeight = (index & 0x0Fu) * 16;
519 paletteIndex =
static_cast<uint8_t
>(index >> 12);
521 nextBlendWeight = (index & 0x0FFFu) * 16;
524 if (paletteIndex >= 16)
530 const uint32_t currentColor = palette[paletteIndex];
533 const ToRGB currentColorRGB {currentColor};
534 uint8_t red = currentColorRGB.r;
535 uint8_t green = currentColorRGB.g;
536 uint8_t blue = currentColorRGB.b;
538 if (nextBlendWeight != 0)
541 const uint32_t nextColor =
542 paletteIndex == 15 ? (PaletteLoops ? palette[0] : currentColor) : palette[paletteIndex + 1];
544 const uint32_t blendedColor = blend<UIntTy>(currentColor, nextColor, nextBlendWeight);
545 const ToRGB blendedColorRGB {blendedColor};
546 red = blendedColorRGB.
r;
547 green = blendedColorRGB.g;
548 blue = blendedColorRGB.b;
554 if (brightness != 255)
564 const uint16_t brightnessScale =
static_cast<uint16_t
>(brightness) + 1u;
566 const auto applyBrightness = [brightnessScale](
const uint8_t component)
constexpr -> uint8_t {
572 return static_cast<uint8_t
>(((
static_cast<uint16_t
>(component) * brightnessScale) >> 8));
575 red = applyBrightness(red);
576 green = applyBrightness(green);
577 blue = applyBrightness(blue);
581 return fromRGB(red, green, blue);
Manipulate color representations.
Tools to manipulate colors and their representation.
Definition: gamma.hpp:10
static constexpr PaletteTy PaletteBlackBodyColors
Black body radiation, with the high end changed to be nicer.
Definition: palettes.hpp:396
static constexpr PaletteTy PalettePartyColors
basically, HSV with no green. looks better when lighing people
Definition: palettes.hpp:378
static constexpr PaletteTy PaletteHeatColors
Heat black body.
Definition: palettes.hpp:415
static constexpr uint32_t from_palette(const UIntTy index, const PaletteTy &palette, const uint8_t brightness=255)
Return a color from a palette.
Definition: palettes.hpp:504
static constexpr PaletteTy PaletteGradient
Return a palette gradient from startColor to endColor.
Definition: palettes.hpp:494
static constexpr PaletteTy PaletteOceanColors
Ocean colors, blues and whites.
Definition: palettes.hpp:306
static constexpr PaletteTy PaletteFlameColors
Fire color palette.
Definition: palettes.hpp:288
ColorTemperature
Color temperature values.
Definition: palettes.hpp:34
@ ClearBlueSky
Definition: palettes.hpp:54
@ HighNoonSun
Definition: palettes.hpp:48
@ HighPressureSodium
Definition: palettes.hpp:78
@ DirectSunlight
Definition: palettes.hpp:50
@ BlackLightFluorescent
Definition: palettes.hpp:70
@ WarmFluorescent
Warm (yellower) flourescent light bulbs.
Definition: palettes.hpp:60
@ GrowLightFluorescent
Definition: palettes.hpp:68
@ MetalHalide
Definition: palettes.hpp:76
@ Candle
1900 Kelvin
Definition: palettes.hpp:38
@ FullSpectrumFluorescent
Definition: palettes.hpp:66
@ Halogen
Definition: palettes.hpp:44
@ UncorrectedTemperature
Uncorrected temperature (0xFFFFFF)
Definition: palettes.hpp:82
@ CarbonArc
Definition: palettes.hpp:46
@ CoolWhiteFluorescent
Definition: palettes.hpp:64
@ MercuryVapor
Definition: palettes.hpp:72
@ Tungsten100W
Definition: palettes.hpp:42
@ StandardFluorescent
Definition: palettes.hpp:62
@ OvercastSky
Definition: palettes.hpp:52
@ Tungsten40W
Definition: palettes.hpp:40
@ SodiumVapor
Definition: palettes.hpp:74
static constexpr PaletteTy PaletteLavaColors
Lava color palette.
Definition: palettes.hpp:270
std::array< uint32_t, 16 > PaletteTy
Palette types.
Definition: palettes.hpp:18
static constexpr PaletteTy PaletteWaterColors
Water colors, blues.
Definition: palettes.hpp:324
static constexpr LMBD_INLINE uint32_t fromRGB(uint8_t r, uint8_t g, uint8_t b)
Return color (r, g, b) as a single uint32_t integer.
Definition: utils.hpp:24
static constexpr PaletteTy PaletteCloudColors
Cloudy color palette/ blue to blue-white.
Definition: palettes.hpp:252
static constexpr PaletteTy PaletteAuroraColors
Palette of green yellow colors.
Definition: palettes.hpp:432
static constexpr PaletteTy PaletteForestColors
Forest colors, greens.
Definition: palettes.hpp:342
static constexpr PaletteTy PaletteRainbowColors
HSV Rainbow.
Definition: palettes.hpp:360
static constexpr PaletteTy PalettePapiColors
Palette of nice handpicked colors.
Definition: palettes.hpp:450
HTMLColorCode
Define common HTML colors.
Definition: palettes.hpp:87
@ LightSteelBlue
Definition: palettes.hpp:167
@ FairyLightNCC
Definition: palettes.hpp:243
@ Purple
Definition: palettes.hpp:206
@ MediumAquamarine
Definition: palettes.hpp:174
@ SteelBlue
Definition: palettes.hpp:223
@ LightGreen
Definition: palettes.hpp:159
@ Tan
Definition: palettes.hpp:224
@ Khaki
Definition: palettes.hpp:150
@ DarkViolet
Definition: palettes.hpp:128
@ Linen
Definition: palettes.hpp:171
@ DarkKhaki
Definition: palettes.hpp:116
@ Pink
Definition: palettes.hpp:202
@ Gray
Definition: palettes.hpp:141
@ Orchid
Definition: palettes.hpp:194
@ Peru
Definition: palettes.hpp:201
@ CadetBlue
Definition: palettes.hpp:102
@ Violet
Definition: palettes.hpp:229
@ LavenderBlush
Definition: palettes.hpp:152
@ LightSeaGreen
Definition: palettes.hpp:163
@ PapayaWhip
Definition: palettes.hpp:199
@ BlanchedAlmond
Definition: palettes.hpp:97
@ Wheat
Definition: palettes.hpp:230
@ LightGrey
Definition: palettes.hpp:160
@ ForestGreen
Definition: palettes.hpp:136
@ MediumPurple
Definition: palettes.hpp:177
@ Brown
Definition: palettes.hpp:100
@ HotPink
Definition: palettes.hpp:146
@ Snow
Definition: palettes.hpp:221
@ Orange
Definition: palettes.hpp:192
@ AntiqueWhite
Definition: palettes.hpp:90
@ PaleGreen
Definition: palettes.hpp:196
@ Cyan
Definition: palettes.hpp:109
@ DarkOliveGreen
Definition: palettes.hpp:118
@ MediumVioletRed
Definition: palettes.hpp:182
@ DarkOrchid
Definition: palettes.hpp:120
@ Salmon
Definition: palettes.hpp:211
@ Beige
Definition: palettes.hpp:94
@ MistyRose
Definition: palettes.hpp:185
@ DarkSlateGrey
Definition: palettes.hpp:126
@ PaleGoldenrod
Definition: palettes.hpp:195
@ DarkSlateGray
Definition: palettes.hpp:125
@ Cornsilk
Definition: palettes.hpp:107
@ DarkGray
Definition: palettes.hpp:113
@ PaleTurquoise
Definition: palettes.hpp:197
@ LimeGreen
Definition: palettes.hpp:170
@ MediumBlue
Definition: palettes.hpp:175
@ Amethyst
Definition: palettes.hpp:89
@ SpringGreen
Definition: palettes.hpp:222
@ IndianRed
Definition: palettes.hpp:147
@ BurlyWood
Definition: palettes.hpp:101
@ LightBlue
Definition: palettes.hpp:155
@ BlueViolet
Definition: palettes.hpp:99
@ SlateGray
Definition: palettes.hpp:219
@ Green
Definition: palettes.hpp:143
@ LightSlateGray
Definition: palettes.hpp:165
@ MintCream
Definition: palettes.hpp:184
@ GreenYellow
Definition: palettes.hpp:144
@ GhostWhite
Definition: palettes.hpp:138
@ LightGoldenrodYellow
Definition: palettes.hpp:158
@ LightSlateGrey
Definition: palettes.hpp:166
@ MediumSlateBlue
Definition: palettes.hpp:179
@ White
Definition: palettes.hpp:231
@ Red
Definition: palettes.hpp:207
@ Tomato
Definition: palettes.hpp:227
@ PeachPuff
Definition: palettes.hpp:200
@ RosyBrown
Definition: palettes.hpp:208
@ Indigo
Definition: palettes.hpp:148
@ Plaid
Definition: palettes.hpp:203
@ LightSkyBlue
Definition: palettes.hpp:164
@ Navy
Definition: palettes.hpp:188
@ WhiteSmoke
Definition: palettes.hpp:232
@ Magenta
Definition: palettes.hpp:172
@ LightCoral
Definition: palettes.hpp:156
@ Turquoise
Definition: palettes.hpp:228
@ Lime
Definition: palettes.hpp:169
@ NavajoWhite
Definition: palettes.hpp:187
@ OldLace
Definition: palettes.hpp:189
@ Goldenrod
Definition: palettes.hpp:140
@ SeaGreen
Definition: palettes.hpp:213
@ LemonChiffon
Definition: palettes.hpp:154
@ Plum
Definition: palettes.hpp:204
@ RoyalBlue
Definition: palettes.hpp:209
@ Lavender
Definition: palettes.hpp:151
@ FireBrick
Definition: palettes.hpp:134
@ LawnGreen
Definition: palettes.hpp:153
@ LightYellow
Definition: palettes.hpp:168
@ Aquamarine
Definition: palettes.hpp:92
@ LightSalmon
Definition: palettes.hpp:162
@ Sienna
Definition: palettes.hpp:215
@ DarkGoldenrod
Definition: palettes.hpp:112
@ Moccasin
Definition: palettes.hpp:186
@ FairyLight
Definition: palettes.hpp:240
@ SlateBlue
Definition: palettes.hpp:218
@ Thistle
Definition: palettes.hpp:226
@ MediumSeaGreen
Definition: palettes.hpp:178
@ MediumOrchid
Definition: palettes.hpp:176
@ MediumTurquoise
Definition: palettes.hpp:181
@ Yellow
Definition: palettes.hpp:233
@ DarkSlateBlue
Definition: palettes.hpp:124
@ SandyBrown
Definition: palettes.hpp:212
@ SkyBlue
Definition: palettes.hpp:217
@ DarkBlue
Definition: palettes.hpp:110
@ AliceBlue
Definition: palettes.hpp:88
@ DeepPink
Definition: palettes.hpp:129
@ Azure
Definition: palettes.hpp:93
@ Gainsboro
Definition: palettes.hpp:137
@ LightPink
Definition: palettes.hpp:161
@ DarkTurquoise
Definition: palettes.hpp:127
@ Teal
Definition: palettes.hpp:225
@ OrangeRed
Definition: palettes.hpp:193
@ Gold
Definition: palettes.hpp:139
@ Blue
Definition: palettes.hpp:98
@ DarkSeaGreen
Definition: palettes.hpp:123
@ FloralWhite
Definition: palettes.hpp:135
@ DarkGreen
Definition: palettes.hpp:115
@ DarkMagenta
Definition: palettes.hpp:117
@ DarkGrey
Definition: palettes.hpp:114
@ DodgerBlue
Definition: palettes.hpp:133
@ Honeydew
Definition: palettes.hpp:145
@ Maroon
Definition: palettes.hpp:173
@ CornflowerBlue
Definition: palettes.hpp:106
@ DarkSalmon
Definition: palettes.hpp:122
@ Black
Definition: palettes.hpp:96
@ PowderBlue
Definition: palettes.hpp:205
@ SlateGrey
Definition: palettes.hpp:220
@ Olive
Definition: palettes.hpp:190
@ Seashell
Definition: palettes.hpp:214
@ Grey
Definition: palettes.hpp:142
@ Silver
Definition: palettes.hpp:216
@ Chocolate
Definition: palettes.hpp:104
@ DimGray
Definition: palettes.hpp:131
@ OliveDrab
Definition: palettes.hpp:191
@ DarkCyan
Definition: palettes.hpp:111
@ LightCyan
Definition: palettes.hpp:157
@ Aqua
Definition: palettes.hpp:91
@ Ivory
Definition: palettes.hpp:149
@ MidnightBlue
Definition: palettes.hpp:183
@ DimGrey
Definition: palettes.hpp:132
@ Chartreuse
Definition: palettes.hpp:103
@ DarkRed
Definition: palettes.hpp:121
@ YellowGreen
Definition: palettes.hpp:234
@ SaddleBrown
Definition: palettes.hpp:210
@ MediumSpringGreen
Definition: palettes.hpp:180
@ DarkOrange
Definition: palettes.hpp:119
@ Coral
Definition: palettes.hpp:105
@ PaleVioletRed
Definition: palettes.hpp:198
@ Crimson
Definition: palettes.hpp:108
@ DeepSkyBlue
Definition: palettes.hpp:130
@ Bisque
Definition: palettes.hpp:95
Exposes (r, g, b) as uint8_t in struct from a single uint32_t color.
Definition: utils.hpp:33
uint8_t r
red
Definition: utils.hpp:42