SDK Multiplataforma en C logo

SDK Multiplataforma en C

Paletas

❮ Anterior
Siguiente ❯

Funciones

Palette*palette_create (...)
Palette*palette_optimal (...)
Palette*palette_cga2 (...)
Palette*palette_ega4 (void)
Palette*palette_rgb8 (void)
Palette*palette_gray1 (void)
Palette*palette_gray2 (void)
Palette*palette_gray4 (void)
Palette*palette_gray8 (void)
voidpalette_destroy (...)
uint32_tpalette_size (...)
color_t*palette_colors (...)

Una paleta no es más que una lista de colores relacionada, normalmente, con un Pixel Buffer indexado (Figura 1). Su principal utilidad es ahorrar espacio en la representación de imágenes, ya que cada pixel se codifica mediante un índice de 1, 2, 4 u 8 bits en lugar del color real donde son necesarios 24 o 32 bits. Por esta razón lo habitual es tener paletas de 2, 4, 16 o 256 colores.


1. Paleta predefinida

Tenemos varias paletas predefinidas tanto en color (Figura 2) como en tonos de gris (Figura 3). La paleta RGB8 se ha creado combinando 8 tonos de rojo (3bits), 8 tonos de verde (3bits) y 4 tonos de azul (2bits). Esto es así porque el ojo humano distingue mucho menos la variación del azul que de los otros dos colores.

  • Utiliza palette_rgb8 y similares para crear una paleta de color.
  • Utiliza palette_gray4 y similares para crear una paleta en tonos de gris.
  • Paletas CGA y EGA.
    Figura 2: Paletas de color predefinidas.
    Paletas en tonos de gris.
    Figura 3: Paletas de gris predefinidas.

2. Paleta óptima

Normalmente las imágenes RGB utilizan 8 bits para cada canal, lo que supone 16.777.216 colores diferentes, muchos más de los que puede distinguir el ojo humano (Figura 4). Para optimizar el espacio que ocupa la imagen, con la menor pérdida posible, se calcula la paleta óptima mediante algoritmos de cuantificación del color (Figura 5). Esto contrasta con el uso de una paleta genérica, donde la pérdida de calidad es evidente ya que es posible que muchos colores no se utilicen al ser muy diferentes a los requeridos (Figura 6).

  • Utiliza palette_optimal para obtener la paleta óptima de una imagen RGB.
  • Imagen de un paisaje y espacio RGB asociado.
    Figura 4: Imagen RGB 24 bits (true color).
    Imagen de un paisaje y su paleta óptima de 256 colores.
    Figura 5: Imagen en 256 colores utilizando una paleta óptima.
    Imagen de un paisaje y su paleta genérica de 81 colores.
    Figura 6: Imagen en 256 colores utilizando una paleta genérica.

palette_create ()

Crea una paleta.

Palette*
palette_create(const uint32_t size);
size

El número de colores.

Retorna

La paleta. El contenido inicial es indeterminado. Editar con palette_colors.


palette_optimal ()

Crea una paleta de colores óptima, aplicando algoritmos de cuantificación del color.

Palette*
palette_optimal(const uint32_t width,
                const uint32_t height,
                const pixformat_t format,
                const byte_t *data,
                const uint32_t size);
width

El ancho en píxeles de la imagen.

height

El alto en píxeles de la imagen.

format

El formato del píxel. Solo ekRGB24 y ekRGBA32 son válidos.

data

Búfer con la información de color de los píxeles.

size

Número de colores en la paleta resultante.

Retorna

La paleta.

Observaciones

Paleta óptima


palette_cga2 ()

Crea la paleta de 4 colores (2 bits) de las tarjetas CGA.

Palette*
palette_cga2(const bool_t mode,
             const bool_t intense);
mode

TRUE para el modo 1 de CGA, FALSE modo 0.

intense

TRUE para colores brillantes.

Retorna

La paleta.

Observaciones

Paleta predefinida


palette_ega4 ()

Crea la paleta por defecto de las tarjetas EGA (16 colores, 4 bits).

Palette*
palette_ega4(void);

Retorna

La paleta.

Observaciones

Paleta predefinida


palette_rgb8 ()

Crea la paleta de por defecto RGB de 8 bits. Los colores combinan 8 tonos de rojo, 8 de verde y 4 de azul.

Palette*
palette_rgb8(void);

Retorna

La paleta.

Observaciones

Paleta predefinida


palette_gray1 ()

Crea una paleta de 2 tonos de gris (1 bit). Negro (0) y blanco (1).

Palette*
palette_gray1(void);

Retorna

La paleta.

Observaciones

Paleta predefinida


palette_gray2 ()

Crea una paleta de 4 tonos de gris (2 bit). Negro (0), blanco (3).

Palette*
palette_gray2(void);

Retorna

La paleta.

Observaciones

Paleta predefinida


palette_gray4 ()

Crea una paleta de 16 tonos de gris (4 bit). Negro (0), blanco (15).

Palette*
palette_gray4(void);

Retorna

La paleta.

Observaciones

Paleta predefinida


palette_gray8 ()

Crea una paleta de 256 tonos de gris (8 bit). Negro (0), blanco (255).

Palette*
palette_gray8(void);

Retorna

La paleta.

Observaciones

Paleta predefinida


palette_destroy ()

Destruye la paleta.

void
palette_destroy(Palette**);

La paleta. Será puesto a NULL tras la destrucción.


palette_size ()

Retorna el número de colores de la paleta.

uint32_t
palette_size(Palette*);

La paleta.

Retorna

El número de colores.


palette_colors ()

Obtiene la lista de colores.

color_t*
palette_colors(Palette*);

La paleta.

Retorna

Colores. El tamaño del array viene dado por palette_size.

Observaciones

El búfer es de lectura/escritura.

❮ Anterior
Siguiente ❯