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