19 Conversiones de formatos de color

En general, Allegro está diseñada para usarse sólo con una profundidad de color a la vez, así que sólo llamará una vez a set_color_depth() y entonces almacenará todos sus bitmaps en el mismo formato. Si quiere mezclar diferentes formatos de píxel, puede usar create_bitmap_ex() en vez de create_bitmap(), y llamar a bitmap_color_depth() para pedir el formato de la imagen en cuestión. La mayoría de las rútinas gráficas requieren que todos sus parámetros de entrada estén en el mismo formato (p.ej. no puede expandir un bitmap origen de 15 bits en un destino de 24 bits), pero hay cuatro excepciones: blit() y las rutinas de rotación puede copiar entren bitmaps de cualquier formato, convirtiendo los datos cuando se requiera, draw_sprite() puede dibujar imágenes origen de 256 colores en destion de cualquier formato, draw_character() _siempre_ usa un bitmap origen de 256 colores, sea cual sea el formato de destino, las funciones draw_trans_sprite() y draw_trans_rle_sprite() son capaces de dibujar imágenes de 32 bits RGBA en un destino hicolor o truecolor, siempre y cuando llame antes a set_alpha_blender(), y la función draw_trans_sprite() es capaz de dibujar una imagen con 8 bits de canal alfa encima de una imagen ya existente de 32 bits, siempre y cuando llame antes a set_write_alpha_blender().

Expandir un bitmap origen de 256 colores en un bitmap destino truecolor es muy rápido (¡obviamente deberá ajustar la paleta de colores correcta antes de la conversión!). Convertir entre diferentes formatos truecolor es algo más lento, y reducir imágenes truecolor a 256 puede ser muy lento (puede acelerarse si crea una tabla global rgb_map antes de realizar la conversión).


int bestfit_color(const PALLETE pal, int r, int g, int b);
Busca en la paleta el valor más parecido al color requerido, que es especificado en el formato hardware de la VGA 0-63. Normalmente debería llamar makecol8() en vez de esto, pero esta función de bajo nivel puede ser útil si necesita usar una paleta de colores diferente a la seleccionada, o si no quiere usar la tabla precalculada rgb_map a propósito.

Relacionado con: makecol8.
extern RGB_MAP *rgb_map;
Para acelerar la reducción de valores RGB a 8 bits, Allegro usa una tabla precalculada de 32k (5 bits por cada componente de color). Debe crear esta tabla antes de usar las rutinas de sombreado gouraud, y si está presente, la tabla acelerará vastamente la función makecol8(). Las tablas RGB pueden ser precalculadas con la utilidad rgbmap, o generadas en tiempo real. La estructura RGB_MAP está definida como:
   typedef struct {
      unsigned char data[32][32][32];
   } RGB_MAP;
Relacionado con: create_rgb_table, makecol8.
void create_rgb_table(RGB_MAP *table, const PALETTE pal, void (*callback)(int pos));
Llena la tabla RGB especificada con datos precalculados de la paleta elegida. Si la función callback no es NULL, será llamada 256 veces durante el cálculo, permitiéndole enseñar un indicador de progreso.
Relacionado con: rgb_map.
void hsv_to_rgb(float h, float s, float v, int *r, int *g, int *b);
void rgb_to_hsv(int r, int g, int b, float *h, float *s, float *v);
Convierte valores de color entre los modos HSV y RGB. Los valores RGB van de 0 a 255, hue va de 0 a 360, y la saturación y el valor van de 0 a 1.



Volver al Indice