Conviertiendo cualquier fnt a 1 bit.

Started by Fede, December 14, 2010, 05:41:36 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

SplinterGU

hay algo que parece no le gusta al get_glypt.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

SplinterGU

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
//--------------------------------------------------------------------------------------
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

SplinterGU

Download Lastest BennuGD Release: http://www.bennugd.org/node/2

SplinterGU

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...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Fede

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.  :-*

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.

SplinterGU

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.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2