Colores
Funciones
color_t | color_rgb (...) |
color_t | color_rgba (...) |
color_t | color_rgbaf (...) |
color_t | color_hsbf (...) |
color_t | color_red (...) |
color_t | color_green (...) |
color_t | color_blue (...) |
color_t | color_gray (...) |
color_t | color_bgr (...) |
color_t | color_html (...) |
void | color_to_hsbf (...) |
void | color_to_html (...) |
void | color_get_rgb (...) |
void | color_get_rgbf (...) |
void | color_get_rgba (...) |
void | color_get_rgbaf (...) |
uint8_t | color_get_alpha (...) |
color_t | color_set_alpha (...) |
Tipos y Constantes
Los colores en Draw2D se codifican mediante un entero de 32 bits con los cuatro canales RGBA en Little-Endian: El rojo en el byte 0, verde en el 1, azul en el 2 y alfa (o transparencia) en el 3 (Figura 1). Se utiliza el alias color_t
como equivalencia a uint32_t
. En el caso particular de que el byte 3 sea igual a 0 (totalmente transparente), los tres primeros bytes no contendrán información RGB, sino un índice a un color predefinido.
- Utiliza color_rgba para crear un color mediante sus componentes RGBA.
- Utiliza color_get_rgba para obtener las componentes RGBA.
- Utiliza color_html para traducir una cadena en formato HTML (
"#RRGGBB"
). - Utiliza kCOLOR_BLACK y similares para acceder a colores básicos predefinidos.
1. Espacio HSV
La representación RGB se basa en la adición de los tres colores de luz primarios. Es la más extendida dentro de la generación de imágenes por computador sobre todo a la hora de calcular sombreados y reflexiones. También se utiliza en TV, monitores o proyectores donde cada pixel se obtiene combinado la luz de tres emisores. No obstante, es muy poco intuitiva para la edición de colores por parte de los humanos. Por ejemplo, dado un color en RGB, es muy complicado aumentar el brillo o variar el tono (entre rojo y naranja, por ejemplo) manipulando la tripleta (r, g, b). El espacio HSV (Hue, Saturation, Value) también llamado HSB (Brightness) soluciona este problema, ya que el efecto de alterar este grupo de valores será altamente predecible (Figura 2).
- Utiliza color_hsbf para crear un color RGB a partir de sus componentes H, S, B.
- Utiliza color_to_hsbf para obtener las componentes H, S, B.
- Hue (Tono): Valor continuo cíclico entre 0 y 1. Donde
0
=Rojo,1/3
=Verde,2/3
=Azul,1
=Rojo (Tabla 1). - Saturación: Es equivalente a añadir pintura blanca al tono base. Cuando
S=1
no se añade nada de blanco (saturación máxima, color puro). Pero siS=0
tendremos un blanco puro, independientemente del tono. - Brillo: Es equivalente a añadir pintura negra a la combinación
HS
. SiB=1
no se añade nada de negro (brillo máximo). SiB=0
tendremos un negro puro, independientemente del tono y la saturación.
RGB | HSV | ||
(0,0,0) | kCOLOR_BLACK |
(?,?,0) | |
(1,1,1) | kCOLOR_WHITE |
(?,0,1) | |
(1,0,0) | kCOLOR_RED |
(0,1,1) | |
(1,1,0) | kCOLOR_YELLOW |
(1/6,1,1) | |
(0,1,0) | kCOLOR_GREEN |
(1/3,1,1) | |
(0,1,1) | kCOLOR_CYAN |
(1/2,1,1) | |
(0,0,1) | kCOLOR_BLUE |
(2/3,1,1) | |
(1,0,1) | kCOLOR_MAGENTA |
(5/6,1,1) |
Al contrario que ocurre en RGB, los HSV no son totalmente independientes. A medida que reduzcamos el brillo irá disminuyendo la cantidad de colores del mismo tono hasta llegar a B=0
donde tendremos negro puro independientemente de H y S. Por otro lado, si S=0
se anulará H y tendremos los diferentes tonos de gris a medida que cambie B desde 0 (negro) hasta 1 (blanco).
kCOLOR_TRANSPARENT
const color_t kCOLOR_TRANSPARENT;
Color totalmente transparente o ausencia de color.
kCOLOR_DEFAULT
const color_t kCOLOR_DEFAULT;
Color por defecto.
kCOLOR_BLACK
const color_t kCOLOR_BLACK;
Color NEGRO rgb(0,0,0).
kCOLOR_WHITE
const color_t kCOLOR_WHITE;
Color BLANCO rgb(255,255,255).
kCOLOR_RED
const color_t kCOLOR_RED;
Color ROJO rgb(255,0,0).
kCOLOR_GREEN
const color_t kCOLOR_GREEN;
Color VERDE rgb(0,255,0).
kCOLOR_BLUE
const color_t kCOLOR_BLUE;
Color AZUL rgb(0,0,255).
kCOLOR_YELLOW
const color_t kCOLOR_YELLOW;
Color AMARILLO rgb(255,255,0).
kCOLOR_CYAN
const color_t kCOLOR_CYAN;
Color CIANO rgb(0,255,255).
kCOLOR_MAGENTA
const color_t kCOLOR_MAGENTA;
Color MAGENTA rgb(255,0,255).
color_rgb ()
Crea un color a partir de los canales R (red), G (green) y B (blue).
color_t color_rgb(const uint8_t r, const uint8_t g, const uint8_t b);
r | El canal rojo. |
g | El canal verde. |
b | El canal azul. |
Retorna
Color.
Observaciones
El canal alpha se establece a 255 (totalmente opaco).
color_rgba ()
Crea un color a partir de los canales R (red), G (green), B (blue) y A (alpha).
color_t color_rgba(const uint8_t r, const uint8_t g, const uint8_t b, const uint8_t a);
r | El canal rojo. |
g | El canal verde. |
b | El canal azul. |
a | El canal alpha (transparencia). |
Retorna
Color.
Observaciones
No se admite a=0
, utilizar kCOLOR_TRANSPARENT en esos casos.
color_rgbaf ()
Crea un color a partir de los canales RGBA normalizados de 0 a 1.
color_t color_rgbaf(const real32_t r, const real32_t g, const real32_t b, const real32_t a);
r | El canal rojo. |
g | El canal verde. |
b | El canal azul. |
a | El canal alpha (transparencia). |
Retorna
Color.
Observaciones
No se admite a=0
, utilizar kCOLOR_TRANSPARENT en esos casos.
color_hsbf ()
Crea un color (rgb) a partir de sus componentes Hue-Saturation-Brightness (Tono-Saturación-Brillo).
color_t color_hsbf(const real32_t hue, const real32_t sat, const real32_t bright);
hue | Componente Hue (brillo). |
sat | Componente Saturation (saturación). |
bright | Componente Brightness (brillo). |
Retorna
Color.
color_red ()
Crea un color RGB utilizando solo el canal rojo.
color_t color_red(const uint8_t r);
r | Canal rojo. |
Retorna
Color.
Observaciones
Equivalente a color_rgb(r, 0, 0)
.
color_green ()
Crea un color RGB utilizando solo el canal verde.
color_t color_green(const uint8_t g);
g | Canal verde. |
Retorna
Color.
Observaciones
Equivalente a color_rgb(0, g, 0)
.
color_blue ()
Crea un color RGB utilizando solo el canal azul.
color_t color_blue(const uint8_t b);
b | Canal azul. |
Retorna
Color.
Observaciones
Equivalente a color_rgb(0, 0, b)
.
color_gray ()
Crea un color RGB gris a partir del valor de intensidad.
color_t color_gray(const uint8_t l);
l | Intensidad (luminancia). |
Retorna
Color.
Observaciones
Equivalente a color_rgb(l, l, l)
.
color_bgr ()
Crea un color a partir de un valor de 32 bits BGR. El byte 0 corresponde al canal B, el 1 al G y el 2 al R. El byte de mayor orden se ignora (se fija a 255).
color_t color_bgr(const uint32_t bgr);
bgr | El valor bgr de 32bits. |
Retorna
Color.
Observaciones
Este orden de bytes es el típico en colores Web.
color_html ()
Crea un color a partir de una cadena en formato HTML o CSS.
color_t color_html(const char_t *html);
1 2 |
color_t c1 = color_html("#FF0000"); // Red color_t c2 = color_html("#000080"); // Navy |
html | La cadena de texto con el color HTML. |
Retorna
El color transformado a RGB.
color_to_hsbf ()
Convierte un color (rgb) al espacio HSB (hue, saturation, brightness).
void color_to_hsbf(const color_t color, real32_t *hue, real32_t *sat, real32_t *sat);
color | Color. |
hue | Componente Hue (tono). |
sat | Componente Saturación. |
sat | Componente Brightness (brillo). |
color_to_html ()
Convierte un color al formato HTML o CSS (#RRGGBB).
void color_to_html(const color_t color, char_t *html, const uint32_t size);
color | El color a convertir. |
html | Búfer donde escribir el resultado. |
size | Tamaño del búfer resultado. |
color_get_rgb ()
Devuelve los valores RGB del color.
void color_get_rgb(const color_t color, uint8_t *r, uint8_t *g, uint8_t *b);
color | Color. |
r | El canal rojo. |
g | El canal verde. |
b | El canal azul. |
Observaciones
En colores de sistema o indexados, hace efectivo el valor RGB.
color_get_rgbf ()
Devuelve los valores RGB del color, normalizados de 0 a 1.
void color_get_rgbf(const color_t color, real32_t *r, real32_t *g, real32_t *b);
color | Color. |
r | El canal rojo. |
g | El canal verde. |
b | El canal azul. |
Observaciones
En colores de sistema o indexados, hace efectivo el valor RGB.
color_get_rgba ()
Devuelve los valores RGBA del color.
void color_get_rgba(const color_t color, uint8_t *r, uint8_t *g, uint8_t *b, uint8_t *a);
color | Color. |
r | El canal rojo. |
g | El canal verde. |
b | El canal azul. |
a | El canal alfa (transparencia). |
Observaciones
En colores de sistema o indexados, hace efectivo el valor RGBA.
color_get_rgbaf ()
Devuelve los valores RGBA del color, normalizados de 0 a 1.
void color_get_rgbaf(const color_t color, real32_t *r, real32_t *g, real32_t *b, real32_t *a);
color | Color. |
r | El canal rojo. |
g | El canal verde. |
b | El canal azul. |
a | El canal alfa (transparencia). |
Observaciones
En colores de sistema o indexados, hace efectivo el valor RGBA.
color_get_alpha ()
Extrae el componente alfa (transparencia) del color.
uint8_t color_get_alpha(const color_t color);
color | Color. |
Retorna
El componente alfa. Si es igual 0 significa que el color es indexado (no contiene valores RGB).
color_set_alpha ()
Cambia el valor alfa (transparencia) de un color.
color_t color_set_alpha(const color_t color, const uint8_t alpha);
color | Color. |
alpha | Componente alfa. |
Retorna
El nuevo color, con la componente alfa alterada.