Color APIs

The color.hpp header provides two classes for performing color management, interpolation, and conversion - espp::Rgb and espp::Hsv which can be converted between each other. The RGB color space provides support for additive blending (which includes averaging, as opposed to light-model-based mixing) and is therefore suited for producing gradients.

Please see Computer Graphics and Geometric Modeling: Implementation and Algorithms, specifically section 8.6 for more information.

API Reference

Header File

Classes

class Rgb

Class representing a color using RGB color space.

Public Functions

explicit Rgb(const float &r, const float &g, const float &b)

Construct an Rgb object from the provided rgb values.

Note

If provided values outside the range [0,1], it will rescale them to be within the range [0,1] by dividing by 255.

Parameters
  • r – Floating point value for the red channel, should be in range [0, 1]

  • g – Floating point value for the green channel, should be in range [0, 1]

  • b – Floating point value for the blue channel, should be in range [0, 1]

Rgb(const Rgb &rgb)

Copy-construct an Rgb object from the provided object.

Note

If provided values outside the range [0,1], it will rescale them to be within the range [0,1] by dividing by 255.

Parameters

rgbRgb struct containing the values to copy.

explicit Rgb(const Hsv &hsv)

Construct an Rgb object from the provided Hsv object.

Note

This calls hsv.rgb() on the provided object, which means that invalid HSV data (not in the ranges [0,360], [0,1], and [0,1]) could lead to bad RGB data. The Rgb constructor will automatically convert the values to be in the proper range, but the perceived color will be changed.

Parameters

hsvHsv object to copy.

explicit Rgb(const uint32_t &hex)

Construct an Rgb object from the provided hex value.

Parameters

hex – Hex value to convert to RGB. The hex value should be in the format 0xRRGGBB.

Rgb &operator=(const Rgb &other) = default

Assign the values of the provided Rgb object to this Rgb object.

Parameters

other – The Rgb object to copy.

Rgb &operator=(const Hsv &hsv)

Assign the values of the provided Hsv object to this Rgb object.

Note

This calls hsv.rgb() on the provided object, which means that invalid HSV data (not in the ranges [0,360], [0,1], and [0,1])

Rgb operator+(const Rgb &rhs) const

Perform additive color blending (averaging)

Parameters

rhs – Other color to add to this color to create the resultant color

Returns

Resultant color from blending this color with the rhs color.

Rgb &operator+=(const Rgb &rhs)

Perform additive color blending (averaging)

Parameters

rhs – Other color to add to this color

Hsv hsv() const

Get a HSV representation of this RGB color.

Returns

An HSV object containing the HSV representation.

uint32_t hex() const

Get the hex representation of this RGB color.

Returns

The hex representation of this RGB color.

Public Members

float r = {0}

Red value ∈ [0, 1].

float g = {0}

Green value ∈ [0, 1].

float b = {0}

Blue value ∈ [0, 1].

class Hsv

Class representing a color using HSV color space.

Public Functions

explicit Hsv(const float &h, const float &s, const float &v)

Construct a Hsv object from the provided values.

Parameters
  • h – Hue - will be clamped to be in range [0, 360]

  • s – Saturation - will be clamped to be in range [0, 1]

  • v – Value - will be clamped to be in range [0, 1]

Hsv(const Hsv &hsv)

Copy-construct the Hsv object.

Parameters

hsv – Object to copy from.

explicit Hsv(const Rgb &rgb)

Construct Hsv object from Rgb object. Calls rgb.hsv() to perform the conversion.

Parameters

rgb – The Rgb object to convert and copy.

Hsv &operator=(const Hsv &other) = default

Assign the values of the provided Hsv object to this Hsv object.

Parameters

other – The Hsv object to copy.

Hsv &operator=(const Rgb &rgb)

Assign the values of the provided Rgb object to this Hsv object.

Parameters

rgb – The Rgb object to convert and copy.

Rgb rgb() const

Get a RGB representation of this HSV color.

Returns

An RGB object containing the RGB representation.

Public Members

float h = {0}

Hue ∈ [0, 360].

float s = {0}

Saturation ∈ [0, 1].

float v = {0}

Value ∈ [0, 1].