Saludos a todos.
Aunque últimamente os tengo algo abandonados tengo la escusa de que estoy usando el poco tiempo libre que tengo para programar. ;D
Estoy haciendo un convertidor de fnt a 1 bit y se me 'cuelga' aleatoriamente. Otras veces me da un Runtime error.
He conseguido descubrir unos de los errores en esta función pero no veo porque no vá.
Agradecería le echarais una miradita.
Muchas gracias.
EDITO:
Subo el código que no se me pega bien.
se parece muchisimo a uno que hice yo hace tiempo...
import "mod_map";
import "mod_draw";
import "mod_say";
private
input;
output;
gr, gr2;
i;
h, w;
ih, iw;
int p1, p2;
begin
input = load_fnt( "MS Sans Serif.fnt" );
output = FNT_NEW(1);
for (i = 0; i < 128; i++)
gr = GLYPH_GET( input, i );
if ( gr )
w = map_info(0,gr,g_width);
h = map_info(0,gr,g_height);
gr2 = map_new(w, h, 1);
for ( ih = 0; ih < h; ih++)
for ( iw = 0; iw < w; iw++)
if ( map_get_pixel(0,gr,iw,ih) )
map_put_pixel(0,gr2,iw,ih,1);
end
end
end
point_get(0,gr,0,&p1,&p2);
point_set(0,gr2,0,p1,p2);
point_get(0,gr,1,&p1,&p2);
point_set(0,gr2,1,p1,p2);
point_get(0,gr,2,&p1,&p2);
point_set(0,gr2,2,p1,p2);
GLYPH_SET( output, i, 0, gr2 );
map_del(0,gr2);
map_del(0,gr);
end
end
FNT_SAVE(output, "MS Sans Serif-1.fnt" );
end
este funciona.
Joder, pues si que se parece.
Voy a mirarlo a ver si comparando pillo algo.
Gracias.
EDITO:
Ya lo he mirado.
Se me cuelga cuando compruebo más de 160 carácteres o así.
¿No se supone que pueden tener hasta 255?
¿Si pido un caráter que no existe con GET_GLYPH se puede corromper el sistema?
Gracias.
EDITO 2:
Na.
No tiene nada que ver con los carácteres.
Tengo que estudiar más tu ejemplo, Splinter.
Chao.
Splinter, si añades al final de tu código las líneas:
unload_fnt(input);
unload_fnt(output);
también peta a partir de 160 caráteres, más o menos.
Dime argo, quillo. ;D
Saludos.
luego le hecho un ojo...
Gracias amoooo. :-*
solucionado, habia un bug cuando se agregaban nuevos caracteres, gracias!
¡TE QUIEROOOOOOOOOO! :-* :-* :-*
(Últimamente estoy muy cariñoso). ;D
En cuanto llegue a casa lo pruebo.
Gracias.
deberia generarte el ejecutable, o lo generas vos?
Ahora que caigo...
¿Cuando se sube el bennu con el bug corregido?
estan los fuentes... tengo que generar los ejecutables... pero la verdad, ya ocupe hoy demasiado tiempo...
Bueno, por lo visto, nos hemos puesto de acuerdo y han salido diversas alternativas funcionales para tener fuentes de 1 bit :D :D :D
¡¡concurso de utilidades para Bennu!!
Quote from: SplinterGU on December 15, 2010, 11:13:35 PM
estan los fuentes... tengo que generar los ejecutables... pero la verdad, ya ocupe hoy demasiado tiempo...
Tranquilo Splinter. Sólo preguntaba. ::)
Más besitos. :-* :-* :-* :-*
Quote from: Drumpi
¡¡concurso de utilidades para Bennu!!
¡Me apunto!
Hola de nuevo.
Esto sigue sin ir bien. Ahora se salta carácteres de la fuente a convertir.
Parece como si algunos no les gustase. :D
Os pongo un código ejemplo con el carácter 173.
Si alguien puede que le eche una miradita. Por si ve algo.
Gracias.
ya estaba probado esto.
puede que sean diferentes encoding... o que el caracter no exista en el font source.
luego lo miro, primero tengo que ver el otro bug reportado.
hay algo que parece no le gusta al get_glypt.
hay un problema que si el font no esta completo no se dibujan los caracteres... tambien puede existir otro probleme provocado por el hecho de que el font que estas cargando es un font div, y tiene un charset diferente al que se genera (like fenix).
import "mod_video";
import "mod_screen";
import "mod_map";
import "mod_key";
import "mod_dir";
import "mod_text";
import "mod_mem";
import "mod_proc";
import "mod_draw";
import "mod_timers";
import "mod_sort";
import "mod_string";
import "mod_file";
import "mod_say";
import "mod_joy";
import "mod_draw";
import "mod_rand";
import "mod_regex";
import "mod_wm";
function main()
// Convierte la fuente a 1 bit de profundidad
private
byte bBits=0;
int iGrafico=0;
int iGraficoNuevo=0;
int iFont=0;
int iNuevaFont=0;
int iLetra=0;
int iAlto=0;
int iAncho=0;
int iContador=0;
int iContadorAncho=0;
int iCOntadorAlto=0;
int iPixel=0;
string sNombre;
int pX=0;
int pY=0;
char text[256];
i;
end
begin
set_mode(1280,600,32);
salida();
sNombre="f2b.fnt";
iFont=Load_Fnt(sNombre);
iNuevaFont=New_Fnt(1);
iGrafico=0;
iContador=0;
text[0]=173;
text[1]=0;
while (iContador<255)
iGrafico=GET_GLYPH(iFont,iContador);
if (iGrafico)
iAncho=map_info(0,iGrafico,g_width);
iAlto=map_info(0,iGrafico,g_height);
say(iancho+","+ialto);
iGraficoNuevo=map_new(iAncho,iAlto,1);
iAncho=map_info(0,iGraficoNuevo,g_width);
iAlto=map_info(0,iGraficoNuevo,g_height);
iContadorAncho=0;
while (iContadorAncho<iAncho)
iContadorAlto=0;
while (iContadorAlto<iAlto)
iPixel=map_get_pixel(0,iGrafico,iContadorAncho,iContadorAlto);
if (iPixel)
map_put_pixel(0,iGraficoNuevo,iContadorAncho,iContadorAlto,1);
else
map_put_pixel(0,iGraficoNuevo,iContadorAncho,iContadorAlto,0);
end
iContadorAlto++;
end
iContadorAncho++;
end
get_point(0,iGrafico,0,&pX,&pY);
set_point(0,iGraficoNuevo,0,pX,pY);
get_point(0,iGrafico,1,&pX,&pY);
set_point(0,iGraficoNuevo,1,pX,pY);
get_point(0,iGrafico,2,&pX,&pY);
set_point(0,iGraficoNuevo,2,pX,pY);
set_glyph(iNuevaFont,iContador,0,iGraficoNuevo);
map_unload(0,iGraficoNuevo);
iGraficoNuevo=0;
map_unload(0,iGrafico);
iGrafico=0;
end
iContador++;
end
sNombre="f2b-b.fnt";
save_fnt(iNuevaFont,sNombre);
write( 0,10,20,0,text);
write( iFont,10,40,0,text);
write(iNuevaFont,10,60,0,text);
// unload_fnt(iFont);
// unload_fnt(iNuevaFont);
end
//--------------------------------------------------------------------------------------
process Salida();
begin
signal_action(s_freeze,S_IGN);
frame;
while (!key(_ESC))
frame;
end
exit();
end
//--------------------------------------------------------------------------------------
sigo revisando.
ya veo, es un tema del charset... 173 es el char 161... (dos to win)... por ende si solo creamos el 173, no se vera, ya que no se crea el 161...
esto es una porqueria...
proba el siguiente codigo
import "mod_video";
import "mod_screen";
import "mod_map";
import "mod_key";
import "mod_dir";
import "mod_text";
import "mod_mem";
import "mod_proc";
import "mod_draw";
import "mod_timers";
import "mod_sort";
import "mod_string";
import "mod_file";
import "mod_say";
import "mod_joy";
import "mod_draw";
import "mod_rand";
import "mod_regex";
import "mod_wm";
function main()
// Convierte la fuente a 1 bit de profundidad
private
byte bBits=0;
int iGrafico=0;
int iGraficoNuevo=0;
int iFont=0;
int iNuevaFont=0;
int iLetra=0;
int iAlto=0;
int iAncho=0;
int iContador=0;
int iContadorAncho=0;
int iCOntadorAlto=0;
int iPixel=0;
string sNombre;
int pX=0;
int pY=0;
char text[256];
int iFin;
i;
end
begin
set_mode(1280,600,32);
salida();
sNombre="f2b.fnt";
iFont=Load_Fnt(sNombre);
iNuevaFont=New_Fnt(1);
iGrafico=0;
iContador=161;
iFin=255;
text[0]=173;
text[1]=0;
while (iContador<iFin)
iGrafico=GET_GLYPH(iFont,iContador);
if (iGrafico)
iAncho=map_info(0,iGrafico,g_width);
iAlto=map_info(0,iGrafico,g_height);
iGraficoNuevo=map_new(iAncho,iAlto,1);
iAncho=map_info(0,iGraficoNuevo,g_width);
iAlto=map_info(0,iGraficoNuevo,g_height);
iContadorAncho=0;
while (iContadorAncho<iAncho)
iContadorAlto=0;
while (iContadorAlto<iAlto)
iPixel=map_get_pixel(0,iGrafico,iContadorAncho,iContadorAlto);
if (iPixel)
map_put_pixel(0,iGraficoNuevo,iContadorAncho,iContadorAlto,1);
else
map_put_pixel(0,iGraficoNuevo,iContadorAncho,iContadorAlto,0);
end
iContadorAlto++;
end
iContadorAncho++;
end
get_point(0,iGrafico,0,&pX,&pY);
set_point(0,iGraficoNuevo,0,pX,pY);
get_point(0,iGrafico,1,&pX,&pY);
set_point(0,iGraficoNuevo,1,pX,pY);
get_point(0,iGrafico,2,&pX,&pY);
set_point(0,iGraficoNuevo,2,pX,pY);
set_glyph(iNuevaFont,iContador,0,iGraficoNuevo);
map_unload(0,iGraficoNuevo);
iGraficoNuevo=0;
map_unload(0,iGrafico);
iGrafico=0;
end
iContador++;
end
sNombre="f2b-b.fnt";
save_fnt(iNuevaFont,sNombre);
write( 0,10,20,0,text);
write( iFont,10,40,0,text);
write(iNuevaFont,10,60,0,text);
// unload_fnt(iFont);
// unload_fnt(iNuevaFont);
end
//--------------------------------------------------------------------------------------
process Salida();
begin
signal_action(s_freeze,S_IGN);
frame;
while (!key(_ESC))
frame;
end
exit();
end
//--------------------------------------------------------------------------------------
cambia iCounter por 162 en vez de 161 y vas a ver en cada prueba como aparece y no aparece...
tengo que pensar esto tranquilamente, a ver si es correcto que se comporte asi o no, y de no serlo como deberia comportarse y como deberia corregirlo.
pero ahora no tengo tiempo...
Gracias Splinter.
Veo que estás en el tema y que tienes mil cosas por hacer, así que tú tranquilo. Verdaderamente cuando puedas.
Y cuando digo cuando puedas, no es mañana ni pasado, es cuando puedas. (Que ya nos vamos conociendo) ;D
Y también cuando puedas me explicas lo de 'esto es un porquería'. Supongo que te referirás a herencia del Div o algo así. ;D
Un abrazo. :-*
porqueria me refiero a que al mapearte los gylph, hay caracteres que no se setean, creo que los glyph deberian tener un modo directo, para obtener el caracter sin charset.