void convert_palette( int fpg, gráfico, int * nueva_paleta )
Descripción:
Transforma el mapa de color del gráfico del fichero indicado.
El puntero a nueva_paleta es la dirección dentro de la memoria del ordenador de una tabla de 256 valores donde se indicará el nuevo orden de los colores del gráfico.
Nota: Esta tabla debe ser de datos simples (de tipo int, enteros de 32 bit con signo).
Si la tabla con la nueva paleta fuera como se muestra a continuación:
int nueva_paleta[256]={0, 1, 2, 3, 4, ... , 254, 255};
el gráfico no sufriría ninguna transformación. Si, por ejemplo, en la posición 3 de la tabla anterior (nueva_paleta[3]) se pusiera un 16 (en lugar de un 3), al llamar a esta función con el puntero de dicha tabla, se sustituiría en el gráfico el color 3 por el color 16.
Los gráficos cargados con las funciones load_map() o load_pcx() (o creados con new_map()) se utilizarán como si pertenecieran al primer fichero (el fichero con el código 0).
Si un proceso quisiera cambiar los colores de su propio gráfico, se debería construir igualmente una tabla con el nuevo orden de los colores y, después, llamar a la función con los parámetros:
convert_palette(file, graph, nueva_paleta)
A continuación se muestra un programa que cambia los colores de su gráfico de esta forma utilizando sus variables locales predefinidas file y graph.
MAIN_PROGRAM_CDIV PRIVATE int nueva_paleta[256]; int contador; BEGIN_PROGRAM set_gfx(GFX_AUTODETECT_WINDOWED); set_mode(m320x200); load_fpg("../help.fpg"); put_screen(1, 1); nueva_paleta[0] = 0; for( contador = 1; contador <= 255; contador++ ) nueva_paleta[contador] = (contador+16) MOD 256; graph=100; x=160; y=100; write (0, 160, 0, 1, "Pulse [ESPACIO] para cambiar los colores de la bola"); LOOP{ if (scan_code==_space) // Convertimos la paleta del gráfico número 100 (bola) convert_palette(file, graph, nueva_paleta); FRAME; } END_PROGRAM
En primer lugar, se crea una tabla con el nuevo orden de los colores de la paleta. El color número 0 (transparente) no se sustituirá por ninguno (nueva_paleta[0] valdrá siempre 0) y el resto de los colores (del 1 al 255) se sustituirán por el color que está 16 posiciones más arriba en la paleta (el 1 por el 17, el 2 por el 18, etc.). Los últimos 16 colores se sustituirán por los 16 primeros (al realizar la operación MOD 256 se truncan los valores, es decir, 256 pasará a 0, 257 a 1, etc.).
Después, dentro del bucle principal del programa se ejecutará la función convert_palette() de modo que cambie los colores del gráfico del programa (una bola) cada vez que se pulse la barra espaciadora.
Ver: load_pal() - roll_palette()