10 Rutinas de paleta

Todas las funciones de dibujo de Allegro usan par�metros en enteros para representar colores. En las resoluciones truecolor estos n�meros codifican el color directamente como una colecci�n de bits rojos, verdes y azules, pero en el modo normal de 256 colores, los valores son tratados como �ndices de la paleta actual, que es una tabla que contiene las intensidades de rojo, verde y azul de cada uno de los 256 colores posibles.

La paleta se almacena con estructuras RGB, que contienen intensidades de rojo, verde y azul en el formato hardware de la VGA, que van de 0 a 63, y son definidas as�:

   typedef struct RGB
   {
      unsigned char r, g, b;
   } RGB;
Por ejemplo:
   RGB negro  = { 0,  0,  0  };
   RGB blanco = { 63, 63, 63 };
   RGB verde  = { 0,  63, 0  };
   RGB gris   = { 32, 32, 32 };
El tipo PALETTE es definido como un array de 256 estructuras RGB.

Puede notar que gran parte del c�digo de Allegro escribe 'palette' como 'pallete'. Esto es porque los ficheros de cabecera de mi viejo compilador Mark Williams del Atari lo escrib�an con dos l's, y estoy acostumbrado a eso. Allegro aceptar� sin problemas ambas escrituras, debido a algunos #defines en allegro/alcompat.h.


void vsync();
Espera a que empiece un retrazo vertical. El retrazo ocurre cuando el rayo de electrones de su monitor ha llegado a la parte inferior de la pantalla y est� volviendo arriba para hacer otro barrido. Durante este corto periodo de tiempo la tarjeta de v�deo no manda datos al monitor, por lo que puede hacer cosas que de otra forma no podr�a, como alterar la paleta sin causar parpadeo (nieve). Sin embargo Allegro esperar� autom�ticamente el retrazo vertical antes de alterar la paleta o hacer scroll por hardware, por lo que normalmente no debe preocuparse por esta funci�n.

Relacionado con: set_palette, scroll_screen, timer_simulate_retrace.
void set_color(int index, const RGB *p);
Cambia la entrada de la paleta especificada al triplete RGB dado. A diferencia de otras funciones de paleta, esto no hace sincronizaci�n con el retrazo, por lo que deber�a llamar vsync() antes para evitar problemas de nieve.
Relacionado con: set_palette, get_color, _set_color.
void _set_color(int index, const RGB *p);
Esta es una versi�n inline de set_color(), que puede usar en la funci�n callback del simulador de retrazo vertical. S�lo deber�a ser usada en VGA modo 13h y modo-X, porque algunos de las recientes SVGAs no son compatibles con la VGA (set_color() y set_palette() usar�n llamadas VESA en estas tarjetas, pero _set_color() no sabr� nada de eso).
Relacionado con: set_color, set_gfx_mode, timer_simulate_retrace.
void set_palette(const PALETTE p);
Ajusta la paleta entera de 256 colores. Debe pasar un array de 256 estructuras RGB. A diferencia de set_color(), no hace falta llamar vsync() antes de esta funci�n.
Relacionado con: select_palette, palette_color, set_gfx_mode, set_palette_range, set_color, get_palette.
void set_palette_range(const PALETTE p, int from, int to, int vsync);
Ajusta las entradas de la paleta desde from hasta to (inclusivos: pase 0 y 255 para ajustar la paleta entera). Si vsync est� activado, espera un retrazo vertical, de otro modo cambia los colores inmediatamente.
Relacionado con: set_palette, get_palette_range.
void get_color(int index, RGB *p);
Recupera la entrada de la paleta especificada.
Relacionado con: get_palette, set_color.
void get_palette(PALETTE p);
Recupera la paleta entera de 256 colores. Debe proveer un array de 256 estructuras RGB para almacenar ah� los colores.
Relacionado con: get_palette_range, get_color, set_palette.
void get_palette_range(PALETTE p, int from, int to);
Recupera las entradas de la paleta desde from hasta to (inclusivos: pase 0 y 255 para recuperar la paleta entera).
Relacionado con: get_palette, set_palette_range.
void fade_interpolate(const PALETTE source, const PALETTE dest, PALETTE output, int pos, int from, to);
Calcula una paleta temporal en un sitio entre source y dest, devolvi�ndola en el par�metro output. La posici�n entre los dos extremos es especificada por el valor pos: 0 devuelve una copia exacta de source, 64 devuelve dest, 32 devuelve una paleta a medio camino entre las dos, etc. Esta rutina s�lo afecta a los colores desde from hasta to (inclusivos: pase 0 y 255 para interpolar la paleta entera).
Relacionado con: fade_in, fade_out, fade_from.
void fade_from_range(const PALETTE source, const PALETTE dest, int speed, int from, to);
Funde gradualmente una parte de la paleta desde la paleta source hasta la paleta dest. La velocidad va de 1 (lento) a 64 (instant�neo). Esta rutina s�lo afecta los colores desde from hasta to (inclusivos: pase 0 y 255 para fundir la paleta entera).
Relacionado con: fade_from.
void fade_in_range(const PALETTE p, int speed, int from, to);
Funde gradualmente una parte de la paleta desde una pantalla negra hasta la paleta especificada. La velocidad va de 1 (lento) a 64 (instant�neo). Esta rutina s�lo afecta los colores desde from hasta to (inclusivos: pase 0 y 255 para fundir la paleta entera).
Relacionado con: fade_in.
void fade_out_range(int speed, int from, to);
Funde gradualmente una parte de la paleta desde la paleta actual hasta una pantalla negra. La velocidad va de 1 (lento) a 64 (instant�neo). Esta rutina s�lo afecta los colores desde from hasta to (inclusivos: pase 0 y 255 para fundir la paleta entera).
Relacionado con: fade_out.
void fade_from(const PALETTE source, const PALETTE dest, int speed);
Funde gradualmente desde la paleta source hasta la paleta dest. La velocidad va de 1 (lento) a 64 (instant�neo).
Relacionado con: fade_in, fade_out, fade_interpolate, fade_from_range.
void fade_in(const PALETTE p, int speed);
Funde gradualmente desde una pantalla negra a la paleta especificada. La velocidad va de 1 (lento) a 64 (instant�neo).
Relacionado con: fade_out, fade_from, fade_interpolate, fade_in_range.
void fade_out(int speed);
Funde gradualmente la paleta actual hasta una pantalla negra. La velocidad va de 1 (lento) a 64 (instant�neo).
Relacionado con: fade_in, fade_from, fade_interpolate, fade_in_range.
void select_palette(const PALLETE p);
Rutina fea que puede usar en algunas situaciones peculiares cuando necesita convertir entre formatos de imagen con paleta a truecolor. Ajusta la tabla de la paleta interna de la misma forma que la funci�n set_palette(), para que la conversi�n use la paleta especificada, pero sin afectar de ning�n modo al hardware de visualizaci�n. La paleta antigua es almacenada en un buffer interno, y puede ser recuperada llamando unselect_palette().
Relacionado con: set_palette, unselect_palette.
void unselect_palette();
Recupera la tabla de la paleta que estaba en uso antes de la �ltima llamada a select_palette().
Relacionado con: select_palette.
void generate_332_palette(PALETTE pal);
Construye una paleta truecolor falsa, usando tres bits para el rojo y el verde y dos para el azul. La funci�n load_bitmap() devuelve esto si el fichero no contiene ninguna paleta (ej. cuando lee un bitmap truecolor).
Relacionado con: generate_optimized_palette, set_color_depth.
int generate_optimized_palette(BITMAP *bmp, PALETTE pal, const char rsvd[256]);
Genera una paleta de 256 colores �ptima para hacer una versi�n reducida, en cuanto a color, de la imagen truecolor especificada. El par�metro rsvd apunta a una tabla que indica qu� colores se le permite modificar a la funci�n: cero para colores libres que pueden ser asignados como el optimizador quiera, valores negativos para colores reservados que no pueden usarse, y valores positivos para entradas fijas de la paleta que no deben cambiarse, pero que se pueden usar en la optimizaci�n.
Relacionado con: generate_332_palette, set_color_depth.
extern PALETTE default_palette;
La paleta por defecto de la BIOS IBM. Se seleccionar� autom�ticamente cuando active un nuevo modo gr�fico.
Relacionado con: black_palette, desktop_palette.
extern PALETTE black_palette;
Una paleta que contiene colores negros s�lidos, usada por las rutinas de fundidos.
Relacionado con: desktop_palette.
extern PALETTE desktop_palette;
La paleta usada por el escritorio de baja resoluci�n del Atari ST. No estoy seguro por qu� esto sigue aqu�, excepto porque los programas grabber y test la usan. Es probablemente el �nico c�digo heredado del Atari que queda en Allegro, y ser�a una pena quitarlo :-)
Relacionado con: black_palette.

Volver al Indice