FastLED 3.9.5
|
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:
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:
Where you have the same "total light" output. OR purple is "as bright
as it can be", e.g.:
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.
Macros | |
#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. | |
#define | HUE_MAX 191 |
Max hue accepted for the hsv2rgb_raw() function. | |
Functions | |
void | hsv2rgb_rainbow (const struct CHSV *phsv, struct CRGB *prgb, int numLeds) |
Forward declaration of hsv2rgb_rainbow here, to avoid circular dependencies. | |
void | hsv2rgb_spectrum (const struct CHSV &hsv, struct CRGB &rgb) |
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 *phsv, struct CRGB *prgb, int numLeds) |
Convert an HSV value to RGB using a mathematically straight spectrum. | |
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. | |
CHSV | rgb2hsv_approximate (const CRGB &rgb) |
Recover approximate HSV values from RGB. | |
#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.
Forward declaration of hsv2rgb_rainbow here, to avoid circular dependencies.
phsv | CHSV array to convert to RGB. Max hue supported is HUE_MAX_RAINBOW |
prgb | CRGB array to store the result of the conversion (will be modified) |
numLeds | the number of array values to process |
Definition at line 479 of file hsv2rgb.cpp.
Convert an HSV value to RGB using a mathematically straight spectrum.
hsv | CHSV struct to convert to RGB. Max hue supported is HUE_MAX |
rgb | CRGB struct to store the result of the conversion (will be modified) |
Definition at line 23 of file hsv2rgb.cpp.
Convert an HSV value to RGB using a mathematically straight spectrum.
phsv | CHSV array to convert to RGB. Max hue supported is HUE_MAX |
prgb | CRGB array to store the result of the conversion (will be modified) |
numLeds | the number of array values to process |
Definition at line 473 of file hsv2rgb.cpp.
Convert an HSV value to RGB using a mathematically straight spectrum.
This "spectrum" will have more green and blue than a "rainbow", and less yellow and orange.
hsv | CHSV struct to convert to RGB. Max hue supported is HUE_MAX_SPECTRUM |
rgb | CRGB struct to store the result of the conversion (will be modified) |
Definition at line 226 of file hsv2rgb.cpp.
Convert an HSV value to RGB using a mathematically straight spectrum.
phsv | CHSV array to convert to RGB. Max hue supported is HUE_MAX_SPECTRUM |
prgb | CRGB array to store the result of the conversion (will be modified) |
numLeds | the number of array values to process |
Definition at line 485 of file hsv2rgb.cpp.
Recover approximate HSV values from RGB.
These values are approximate, not exact. Why is this "only" an approximation? Because not all RGB colors have HSV equivalents! For example, there is no HSV value that will ever convert to RGB(255,255,0) using the code provided in this library. So if you try to convert RGB(255,255,0) "back" to HSV, you'll necessarily get only an approximation. Emphasis has been placed on getting the "hue" as close as usefully possible, but even that's a bit of a challenge. The 8-bit HSV and 8-bit RGB color spaces are not a "bijection".
Nevertheless, this function does a pretty good job, particularly at recovering the 'hue' from fully saturated RGB colors that originally came from HSV rainbow colors. So if you start with CHSV(hue_in,255,255), and convert that to RGB, and then convert it back to HSV using this function, the resulting output hue will either exactly the same, or very close (+/-1). The more desaturated the original RGB color is, the rougher the approximation, and the less accurate the results.
rgb | an RGB value to convert |
Definition at line 498 of file hsv2rgb.cpp.