Como crear paletas de 8 bits?

Started by JaViS, May 02, 2011, 12:36:30 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

JaViS

Hola,

estaba por crear un FPG de 8 bits con Smart FPG Editor, y me pidio un archivo de paleta para usar.

y ahi me acorde como venia la mano :P

hay algun editor de paletas que uds usen? como se manejan con este tema?

muchas gracias
Working on Anarkade. A couch multiplayer 2D shooter.


darío

También puedes cargar la paleta de cualquier archivo gif, bmp, png que sea de 8bits. Si usas algún programa que te permita generar alguno de estos formatos en 8 bpp controlando la paleta (gimp, graphicsgale, photoshop, etc) podrías generar una imagen y usarla como tu archivo de paleta.

De todos modos, es algo que tengo que incluir, sí...
My sites:
Smart Fpg Editor - Painless FPG Edition for Bennu and PixTudio
fenixlib - .NET support for manipulating PixTudio, Bennu and Div graphic formats

Fede

Si quieres ser sabio, aprende a interrogar razonablemente, a escuchar con atención, a responder serenamente y a callar cuando no tengas nada que decir.

Drumpi

#4
Yo me cree una función que me lee de un BMP de 24 bits los colores y me los guarda en un array de 256*3 bytes para poder crear mapas de durezas de forma más cómoda. Lo tengo en un programa más largo (me convierte de un TMF a un mapa de durezas, pero no me acuerdo exactamente ahora qué es lo que hacía exactamente), así que es posible que falte algo (por ejemplo, el array global de 256*3 bytes):

[code language="bennu"]function obtener_paleta (string op_bmp_file)
private
   int op_fileid;
   bmp_header op_head;
   
   byte op_read_color[2];
   int  op_last_color;
   
   int cont_pos;
   int cont1,cont2;
   int cont_aux;
   
   byte temp;
begin
   op_fileid=fopen(op_bmp_file,O_READ);
   if (op_fileid)
       //leemos la cabecera
       fread(op_fileid,op_head);
       //cont_pos=sizeof(bmp_header);
       
       //leemos los datos
       for (cont2=0;cont2<op_head.alto;cont2++)        //contador línea
           for (cont1=0;cont1<op_head.ancho;cont1++)   //contador columna
               //leemos 3 bytes de color
               fread(op_fileid,op_read_color);
               //say("Color ("+cont1+","+cont2+") : "+op_read_color[0]+" , "+op_read_color[1]+
               //    " , "+op_read_color[2]+". POSICIÓN: "+cont_pos);
               cont_pos+=3;
               
               //buscamos color en la paleta actual
               cont_aux=0;
               while ((cont_aux<=op_last_color) && (cont_aux<=255))
                   if ((op_read_color[2]==fpg_paleta[cont_aux*3])     &&
                       (op_read_color[1]==fpg_paleta[(cont_aux*3)+1]) &&
                       (op_read_color[0]==fpg_paleta[(cont_aux*3)+2])   )  //coincide
                       
                      break;
                   else                //no coincide, miramos siguiente
                       cont_aux++;
                   end
               end
                   //en este punto, cont_aux puede haber encontrado una coincidencia, por lo que
                   //valdrá igual o menor que el último color, si no, valdrá uno más y habrá que
                   //añadirlo (siempre que no se salga de la tabla)
               if ((cont_aux>op_last_color) && (cont_aux<256))
                   fpg_paleta[cont_aux*3]    =op_read_color[2];
                   fpg_paleta[(cont_aux*3)+1]=op_read_color[1];
                   fpg_paleta[(cont_aux*3)+2]=op_read_color[0];
                   op_last_color=cont_aux;         //incrementamos (en uno) el máximo de colores.
               end
           end
           
           //ahora hay que alinear el puntero de lectura a 4 bytes
           if ((cont_pos %4)!=0)
               cont_aux=4-(cont_pos % 4);
               //say("CONT AUX vale: "+cont_aux);
               op_read_color[0]=0;
               while (cont_aux>0)
                   fread(op_fileid,temp);
                   cont_pos++;
                   cont_aux--;
               end
           end
       end
       
       //y borramos los colores sobrantes
       for (cont_aux=op_last_color+1;cont_aux<256;cont_aux++)
           fpg_paleta[cont_aux*3]    =0;
           fpg_paleta[(cont_aux*3)+1]=0;
           fpg_paleta[(cont_aux*3)+2]=0;
       end
       //loop frame; end
       //while (!key(_z)) frame; end
       
       fclose(op_bmp_file);
   end
end[/code]

Después usando set_colors y save_pal o algo así, pues se guarda, si no creo que tengo una función que salva los datos de la paleta, pero creo que está en el formato de FPG.
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

darío

O puedes hacer uso de la herramienta que te adjunto y que es un pequeño refrito de una pequeña herramienta que hice hace ya unos cuantos años. Básicamente le he cambiado el nombre y alguna cosa más, la he recompilado en un Jar y la he subido.

Permite abrir y crear PAL y FPL (un formato de paletas de Fenix que al final se quitó).

También permite abrir MAPs de 8 y 16bpp y editar sus puntos de control pero no es muy cómodo... También permite extraer la paleta de un MAP (espero que siga funcionando porque no lo he probado).

No es la mejor herramienta del mundo (mucho menos el editor de puntos de control), pero el editor de Paletas es bastante usable.

Ahh está hecha en Java. Yo la he probado en Linux y funcionaba.

Espero que te siva :)

Un saludo!
My sites:
Smart Fpg Editor - Painless FPG Edition for Bennu and PixTudio
fenixlib - .NET support for manipulating PixTudio, Bennu and Div graphic formats

JaViS

muchas gracias chicos!! me encanto el prg de Drumpi, muchas gracias a todos por tomarse la molestia. son unos grosos :D
Working on Anarkade. A couch multiplayer 2D shooter.

DCelso

Quote from: JaViS on May 03, 2011, 03:01:26 AM
muchas gracias chicos!! me encanto el prg de Drumpi, muchas gracias a todos por tomarse la molestia. son unos grosos :D
ehh, mas llamao gordo ? ;D, porque lo estoy que si no... :D

por cierto jue, a mi me encanta el paletero (vale que lo he hecho yo y se me adapta completamente a todas mis necesidades pero)  es que es tan intiutivo ... :D
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/