SDK Multiplataforma en C logo

SDK Multiplataforma en C

Colores

❮ Anterior
Siguiente ❯

Funciones

color_tcolor_rgb (...)
color_tcolor_rgba (...)
color_tcolor_rgbaf (...)
color_tcolor_hsbf (...)
color_tcolor_red (...)
color_tcolor_green (...)
color_tcolor_blue (...)
color_tcolor_gray (...)
color_tcolor_bgr (...)
color_tcolor_html (...)
voidcolor_to_hsbf (...)
voidcolor_to_html (...)
voidcolor_get_rgb (...)
voidcolor_get_rgbf (...)
voidcolor_get_rgba (...)
voidcolor_get_rgbaf (...)
uint8_tcolor_get_alpha (...)
color_tcolor_set_alpha (...)

Tipos y Constantes

color_tkCOLOR_TRANSPARENT
color_tkCOLOR_DEFAULT
color_tkCOLOR_BLACK
color_tkCOLOR_WHITE
color_tkCOLOR_RED
color_tkCOLOR_GREEN
color_tkCOLOR_BLUE
color_tkCOLOR_YELLOW
color_tkCOLOR_CYAN
color_tkCOLOR_MAGENTA

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.
  • Entero de 32bits representando un valor RGBA.
    Figura 1: Representación de un valor RGBA en 32 bits.

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.
  • Cono HSV que representa los colores en este espacio.
    Figura 2: Espacio HSV representado por un cono invertido. A medida que se reduzca V, también lo hará la cantidad de colores disponibles.
  • 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 si S=0 tendremos un blanco puro, independientemente del tono.
  • Brillo: Es equivalente a añadir pintura negra a la combinación HS. Si B=1 no se añade nada de negro (brillo máximo). Si B=0 tendremos un negro puro, independientemente del tono y la saturación.
  • Tabla 1: Equivalencia RGB/HSV.
    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.

❮ Anterior
Siguiente ❯