libreria-esp-color

Librería ESP-Color

La librería ESP_Color contiene funciones para la conversión y operación de colores en un procesador como el ESP8266 y ESP32, siendo la sucesora de Arduino-ColorConverter.

La clase Color incluye formatos para color RGB888, RGB666, RGB565, RGB332, HSV, HSL, escala de grises GREY256, GREY16, GREY4 y blanco y negro BW.

Además de permitir realizar conversiones, ESP_Color incorpora operaciones como adición y blending, así como gestión del canal de transparencia.

Otras utilidades son creación desde temperatura de calor, creación de gradientes, corección gamma y gestión de paletas de colores.

Es decir, básicamente cualquier funcion que alguna vez puedas necesitar en gestión colores. Un ejemplo de uso de la librería es el siguiente.

ESP_Color::Color color(1.0f, 0.5f, 0.2f);

Serial.printf("R:%5.2f\tG:%5.2f\tB:%5.2f\tA:%5.2f\n", color.R, color.G, color.B, color.A);
Serial.printf("R:%d\tG:%d\tB:%d\tA:%d\n", color.R_Byte(), color.G_Byte(), color.B_Byte(), color.A_Byte());
Serial.println();

auto hsl = color.ToHsl();
Serial.printf("H:%5.2f\tS:%5.2f\tL:%5.2f\tA:%5.2f\n", hsl.H, hsl.S, hsl.L, hsl.A);

auto hsv = color.ToHsv();
Serial.printf("H:%5.2f\tS:%5.2f\tL:%5.2f\tA:%5.2f\n", hsv.H, hsv.S, hsv.V, hsv.A);

Serial.println();
Serial.printf("RGB8888\t:%x\n", color.ToRgba8888());
Serial.printf("RGB888 \t:%x\n", color.ToRgb888());
Serial.printf("RGB666 \t:%x\n", color.ToRgb666());
Serial.printf("RGB565 \t:%x\n", color.ToRgb565());

Serial.println();
Serial.printf("GREY256\t:%d\n", color.ToGray256());
Serial.printf("GREY16 \t:%d\n", color.ToGray16());
Serial.printf("GREY4  \t:%d\n", color.ToGray4());
Serial.printf("BW     \t:%d\n", color.ToBW());

Paletas de colores

La librería ESP_Color también incorpora el concepto de paleta, un array de colores que permiten generar interface de usuarios o efectos como fuego de forma eficiente.

Se incorpora un gran número de paletas predefinidas de 64 colores de longitud.

ESP_Color::Palette<uint16_t> palette(ESP_Color::Palettes64::MAGMA_64, 64);

for(size_t h = 0; h < screen.height(); h++)
{
  auto index = (int)(64 * (float)h / screen.height());
  screen.drawFastHLine(0, h, screen.width(), palette[index]);
}

No obstante también es posible generar tu propia paleta con un número cualquier de elementos, mediante el método ‘generate’.

ESP_Color::Palette<uint16_t> palette(128);

const ESP_Color::Color color1((uint16_t)TFT_YELLOW);
const ESP_Color::Color color2((uint16_t)TFT_CYAN);
const ESP_Color::Color color3((uint16_t)TFT_RED);

palette.Generate([color1, color2, color3](float f) -> uint16_t { 
  return ESP_Color::Color::FromGradient(color1, color2, color3, f).ToRgb565();
} );

Descarga el código

Todo el código está disponible para su descarga en Github en este enlace https://github.com/luisllamasbinaburo/ESP-Color github-full