convert_palette()

convert_palette(<fichero>, <gráfico>, <OFFSET nueva_paleta>)

Descripción:

Transforma el mapa de color del <gráfico> del <fichero> indicado.

El <offset 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:

  nueva_paleta[255]=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 offset 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, <OFFSET 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.

Programa ejemplo:
PROGRAM ejemplo_convert_palette;

PRIVATE
    nueva_paleta[255];
    contador;

BEGIN
    load_fpg("help\help.fpg");
    put_screen(0, 1);

    FROM contador=1 TO 255;
        nueva_paleta[contador]=(contador+16) MOD 256;
    END

    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, offset nueva_paleta);

        END
        FRAME;
    END
END


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()