Escalar gráficos y guardarlos en un .fpg

Started by masteries, December 04, 2011, 03:51:48 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

masteries

Saludos "compañeros del metal":

He estado intentando escalar gráficos y guardarlos en un .fpg ya escalados, para luego después no tener que utilizar la sentencia "size". Mi intención es guardar los gráficos ya preescalados.

Utilizo Fénix 0.92a, todavía no he dado el salto a Bennu (comentarios a este respecto mejor no escribirlos, no aportan a menos que la solución se pueda programar en Bennu, entonces estaría encantado de escucharos), mi máquina objetivo es la GP2X F100/F200 y el proyecto en el que estoy trabajando en un motor de carreteras al estilo del juego Arcade "OutRunners", el siguiente vídeo es de una versión anticuada del motor, ahora ya puedo dibujar valles y colinas. Estoy aquí por recomendación personal de GameMaster (pero, recomendación dada en "carne y hueso"), que me ha recomendado muy bien este foro.

Este vídeo os sirve para haceros una idea:
http://www.youtube.com/watch?v=tXsdBy-YQTE

El motor posee un altísimo rendimiento, actualmente alcanza las 180 actualizaciones de carretera por segundo en GP2X, en color de 16 bits.

Respecto a su portabilidad decir que es fácilmente portable, de hecho tengo hecho un port (más o menos funcional) a lenguaje C para microncontroladores STM32 utilizando pantalla LCD color y s.o. uc/os 2, y tira a 72Mhz unos 10-14 cuadros por segundo. Así que la portabilidad a Bennu debe ser casi inmediata.

Hasta ahora he estado haciendo lo de escalar los gráficos a mano con Paint Shop Pro 8, pero es una tarea muy tediosa, y con la gran cantidad de sprites que necesito no es una opción viable.

El código que he utilizado es el siguiente, pero de momento no me ha funcionando porque no guarda el gráfico escalado, parece que no obedece a "size", tampoco me funciona la sentencia "save_fpg", no me la reconoce (Fénix 0.92a):


program spriteador;

global
int id_fpg;
int id_graph;
int id_new_graph;
BYTE aux_g;
end

BEGIN
     full_screen=false;
     set_mode(320,240,16);//Ventana de 320x240 color de 16 bits
     set_fps(30,0);//30 fps por segundo
     id_fpg=load_fpg("sprite.fpg");
     graph=1;
     x=160;
     y=120;
     frame;
     for(aux_g=1;aux_g<=26;aux_g++)//empieza en el 1 porque la posición 0 es la original con size=100
        switch(aux_g)
           case 1:
              graph=1;
              size=100;
           end
           case 2:
              graph=1;
              size=95;
           ...
           ...
           ...
           case 26:
              graph=1;
              size=11;
           end
        end//fin del switch
        fpg_add(id_fpg,aux_g,id_fpg,graph);
        frame;
     end//fin del for
     //fpg_save(id_fpg,"sprite");
     write(0,160,10,4,"Comprobando...");
     for(aux_g=1;aux_g<=26;aux_g++)
        graph=aux_g;//no chuta, obedece al último size,
        frame;//por lo que supongo que hace 26 copias iguales en tamaño al
     end//original
     //save_fpg(id_fpg,"sprites");
     delete_text(all_text);
     unload_fpg(id_fpg);
     exit();
END



Si conoceís alguna manera de hacer esto mismo con algún programa de gráficos en lugar de programando, pues también me valdría.

Gracias anticipadas por las respuestas.

KeoH

la funcion Size no te va a servir, porq esta no altera el mapa de bits. Tal vez podrias hacerte una funcion q obtubiera el tamaño en pixels del grafico a reescalar, calcules el nuevo tamaño (multiplicando por 0.5 para hacerlo al 50% por ejemplo), creando un mapa nuevo con map_new ... y despues pegando la imagen reescalada con map_xput


Supongo q te referias a esto xD prueba asi a ver q tal.

FreeYourMind


masteries

Gracias, ya lo he resuelto utilizando el comando "convert" de ImageMagick.