¡Hola a todos!
Llevo unos días intentando hacer funcionar un código. La idea es simple: le paso una profundidad de color, una ruta y un nombre y el programa genera un fpg con el nombre y la profundidad de color indicados cuyo contenido son las imágenes contenidas en la ruta indicada.
Como base uso un programa que proporcionaba Pixel en su pixplantilla. Pero, por alguna razón, me suelta error cuando intenta hacer el save_fpg y siempre me da error.
¿Se os ocurre qué puedo estar haciendo mal?
El código es el siguiente: http://miguelalbors.noip.me/codigos/index.php?c=pxlfpg.prg (http://miguelalbors.noip.me/codigos/index.php?c=pxlfpg.prg)
Holas Yawin :)
Bricopregunta: ¿Estás haciéndolo con BennuGD o con PixTudio?
Yo para funciones de manipulación de FPGs utilizo BennuGD
el load_png no siempre convierte los mapas a la profundidad del video, sin dudas tenes mapas de diferente profundidad de color... yo te diria que metas debug ahi para ver si alguno tiene una profundidad diferente...
en ese caso, vas a tener que convertirlos manualmente...
cambia
temp = load_png(nombre);
por:
temp1 = load_png(nombre);
temp = map_new(graphic_info(0,temp1,G_WIDTH),graphic_info(0,temp1,G_HEIGHT),argv[1]);
map_block_copy (0, temp , 0 , 0, temp1,width*(i-1),0,graphic_info(0,temp1,G_WIDTH),graphic_info(0,temp1,G_HEIGHT),0);
unload_map(0,temp1);
Quote from: DCelso on November 16, 2016, 09:55:49 PM
cambia
temp = load_png(nombre);
por:
temp1 = load_png(nombre);
temp = map_new(graphic_info(0,temp1,G_WIDTH),graphic_info(0,temp1,G_HEIGHT),argv[1]);
map_block_copy (0, temp , 0 , 0, temp1,width*(i-1),0,graphic_info(0,temp1,G_WIDTH),graphic_info(0,temp1,G_HEIGHT),0);
unload_map(0,temp1);
exacto! aunque hay que tener cuidado ya que no se puede hacer conversiones de mapas desde una profundidad mayor a una menor... a menos que se haga manualmente manipulando pixel a pixel...
Vale, a ver, por partes.
Pixel: No, no uso pixtudio. Lo sigo con interés, pero me mantengo fiel a la palabra de Splinter, al menos por el momento, prefiero mantenerme dentro de lo que conozco.
Splinter, Dcelso: Ahora mismo pruebo lo que me decís; pero me gustaría poder entender qué hace ese código xD
ese codigo lo que hace es crear un grafico igual al que cargaste, pero con la profundidad de colores de la pantalla, y luego de eso, pone/dibuja el grafico cargado sobre este nuevo.
Quote from: Yawin on November 16, 2016, 10:34:09 PM
Pixel: No, no uso pixtudio. Lo sigo con interés, pero me mantengo fiel a la palabra de Splinter, al menos por el momento, prefiero mantenerme dentro de lo que conozco.
Ok... Aunque, como ya dije, yo uso BennuGD para manipulaciones de FPGs xD
Pues me sigue sin ir. No sé qué puede pasar. Añadiendo vuestra propuesta de cambio me ha quedado así: http://miguelalbors.noip.me/codigos/?c=pxlfpg.prg
Ejecutando: bgdi pxlfpg.dcb 16 /ruta/ prueba.fpg
Me genera esto: http://miguelalbors.noip.me/prueba.fpg
Y tengo comprobado que las imágenes están correctamente.
Sube también las imágenes para comprobarlo.
Adjunto lo dejo. Pero ya aseguro que están correctamente.
width*(i-1) está mal, debe ser 0, en vez de poner esa formula, la casualidad es que da 0 esa formula porque ni width ni i las inicializas :D.
no se, lo veo todo bien.
solo se me ocurre que cambies
temp = map_new(graphic_info(0,temp1,G_WIDTH),graphic_info(0,temp1,G_HEIGHT),argv[1]);
por
temp = map_new(graphic_info(0,temp1,G_WIDTH),graphic_info(0,temp1,G_HEIGHT),atoi(argv[1]));
a ver si va
import "mod_dir";
import "mod_draw";
import "mod_file";
import "mod_grproc";
import "mod_joy";
import "mod_key";
import "mod_map";
import "mod_math";
import "mod_mouse";
import "mod_proc";
import "mod_rand";
import "mod_regex";
import "mod_say";
import "mod_screen";
import "mod_sound";
import "mod_string";
import "mod_sys";
import "mod_text";
import "mod_time";
import "mod_timers";
import "mod_video";
import "mod_wm";
private
string nombre;
folder;
begin
set_mode(100,100,argv[1]);
frame;
say("Procesando " + argv[3]);
procesa(argv[3], argv[2]);
end
function procesa(string fpgname, string path);
private
i;
j;
temp, temp1;
width;
string nombre, oldPath;
begin
if(fpgname=="") return; end
oldPath = cd();
chdir(path);
file=fpg_new();
from x=0 to 999;
nombre="";
if(file_exists(itoa(x)+".png"))
nombre=itoa(x)+".png";
elseif(file_exists("0"+itoa(x)+".png"))
nombre="0"+itoa(x)+".png";
elseif(file_exists("00"+itoa(x)+".png"))
nombre="00"+itoa(x)+".png";
end
if(nombre!="")
temp1 = load_png(nombre);
temp = map_new(graphic_info(0,temp1,G_WIDTH),graphic_info(0,temp1,G_HEIGHT),argv[1]);
map_block_copy(0,temp,0,0,temp1,0,0,graphic_info(0,temp1,G_WIDTH),graphic_info(0,temp1,G_HEIGHT),b_nocolorkey);
unload_map(0,temp1);
if(temp>0)
say("Cargamos la imagen " + x);
fpg_add(file,x,0,temp);
unload_map(0,temp);
else
say("Error cargando "+fpgname+":"+nombre);
end
end
end
chdir(oldPath);
if(!save_fpg(file,cd()+"/"+fpgname+".fpg"))
say("Error guardando "+cd()+"/"+fpgname+".fpg");
end
unload_fpg(file);
chdir("..");
end
Con el código que has puesto, Splinter, si me hace algo. Pero no bien. No sé, ya miraré qué puedo estar haciendo mal.
(A la izquierda, el resultado. A la derecha, el original).
Quote from: Yawin on November 18, 2016, 08:25:34 PM
Con el código que has puesto, Splinter, si me hace algo. Pero no bien. No sé, ya miraré qué puedo estar haciendo mal.
(A la izquierda, el resultado. A la derecha, el original).
el que yo probe salio genial, no asi como pones vos... por que no pones el png original?
Los he puesto un poco más arriba: http://forum.bennugd.org/index.php?topic=4402.msg69966#msg69966
Quote from: Yawin on November 21, 2016, 04:20:38 PM
Los he puesto un poco más arriba: http://forum.bennugd.org/index.php?topic=4402.msg69966#msg69966
yo en ninguno de los 3 png que subiste en ese pack, veo una caja de madera como la que pones en la captura...
:D ;D , y yo volviendome loco, digo pero donde está el cubo..
el problema va a estar en ese sprite, a mi me va todo de pm. mira te adjunto pantallazo de fpgeditor, el prg, version bgid, resultado fpg e imagenes fuente.
Cambia a gusto el directorio de imagenes y rula el bat a ver si te va todo ok.
Pues no lo sé. Pero bah, ya lo miraré cuando tenga tiempo.
cuelga el mapa de la caja de madera y lo vemos... (DCelso, yo tambien pense que era un cubo, hasta que me detuve a mirar en detalle la otra mitad de la captura)