FastLED 3.9.15
Loading...
Searching...
No Matches
HSV to RGB Conversion Functions

Detailed Description

Functions to convert from the HSV colorspace to the RGB colorspace.

These basically fall into two groups: spectra, and rainbows. pectra and rainbows are not the same thing. Wikipedia has a good llustration that shows a "spectrum" and a "rainbow" side by side:
Spectra and Rainbow comparison

Source: http://en.wikipedia.org/wiki/Rainbow#Number_of_colours_in_spectrum_or_rainbow

Among other differences, you'll see that a "rainbow" has much more yellow than a plain spectrum. "Classic" LED color washes are spectrum based, and usually show very little yellow.

Take a look Wikipedia's page on HSV color space, with pseudocode for conversion to RGB color space: http://en.wikipedia.org/wiki/HSL_and_HSV

Note that their conversion algorithm, which is (naturally) very popular is in the "maximum brightness at any given hue" style, vs. the "uniform brightness for all hues" style.

You can't have both; either purple is the same brightness as red, e.g:

red = 0xFF0000
purple = 0x800080

Where you have the same "total light" output. OR purple is "as bright as it can be", e.g.:

red = 0xFF0000
purple = 0xFF00FF

Where purple is much brighter than red.

The colorspace conversions here try to keep the apparent brightness constant even as the hue varies.

Adafruit's "Wheel" function, discussed here is also of the "constant apparent brightness" variety.

Todo
Provide the "maximum brightness no matter what" variation.
See also
Some good, clear Arduino C code from Kasper Kamperman, which in turn was based on Windows C code from "nico80"

Macros

#define HUE_MAX   191
 Max hue accepted for the hsv2rgb_raw() function.
 
#define HUE_MAX_RAINBOW   255
 Max hue accepted for the hsv2rgb_rainbow() function.
 
#define HUE_MAX_SPECTRUM   255
 Max hue accepted for the hsv2rgb_spectrum() function.
 

Functions

FASTLED_NAMESPACE_BEGIN void hsv2rgb_rainbow (const struct CHSV *phsv, struct CRGB *prgb, int numLeds)
 Forward declaration of hsv2rgb_rainbow here, to avoid circular dependencies.
 
void hsv2rgb_raw (const struct CHSV &hsv, struct CRGB &rgb)
 Convert an HSV value to RGB using a mathematically straight spectrum.
 
void hsv2rgb_raw (const struct CHSV *phsv, struct CRGB *prgb, int numLeds)
 Convert an HSV value to RGB using a mathematically straight spectrum.
 
CRGB hsv2rgb_spectrum (const struct CHSV &hsv)
 Inline version of hsv2rgb_spectrum which returns a CRGB object.
 
void hsv2rgb_spectrum (const struct CHSV &hsv, struct CRGB &rgb)
 Convert an HSV value to RGB using a mathematically straight spectrum.
 
void hsv2rgb_spectrum (const struct CHSV *phsv, struct CRGB *prgb, int numLeds)
 Convert an HSV value to RGB using a mathematically straight spectrum.
 
CHSV rgb2hsv_approximate (const CRGB &rgb)
 Recover approximate HSV values from RGB.