PDA

Ver la versión completa : clase para mostrar fuentes bitmap



schan
12/01/2006, 03:31
hola,

voy a dejar por aqui una clase que estoy usando en varios proyectos para mostrar texto con fuentes bitmap.

A diferencia de las fuentes ttf, no se puede cambiar el tamaño ni el color, pero son fáciles de crear y permiten ciertos "efectos especiales".

Esta clase está inspirada en la librería guichan, el formato de las imágenes es el mismo y la forma de uso es similar, aunque el código está escrito desde cero y es totalmente distinto.

Voy a intentar explicar el formato de las imágenes con las fuentes, aunque como mejor se ve es con un ejemplo. Hay dos colores clave, que voy a llamar color de fondo (en el ejemplo es el negro) y color de separación (en el ejemplo es rojo). Puedes elegir los que quieras, (siempre que sean distintos por supuesto).
La imagen tiene que incluir una serie de letras, en el orden que quieras. Cada letra debe estar rodeada por un rectángulo del color de separación (rojo en el ejemplo), que marca el ancho de la letra. Si el borde rojo es muy grande, las letras quedarán muy separadas y si es estrecho quedarán juntas. No tiene por que sobresalir de la letra por los lados, lo que si es imprescindible es que sobresalga al menos 1 pixel por encima (es decir, que en la primera fila de pixeles solo haya rojo y negro).
Cada uno de esos rectángulos tiene que estar separado de los de al lado por una franja del color de fondo (negro) de al menos 2 pixeles.
Es un poco lioso pero espero que con el ejemplo se entienda bien...


La clase tiene solo dos funciones públicas:

void load(char *filename, char *characters)
Carga una imagen (filename). El segundo parámetro dice que letras hay en la imagen y en qué orden.

draw(SDL_Surface *dest, char *text, int x, int y, bool centerH=false, bool centerV=false)
Escribe el texto (text) en la superficie (dest), en la posición (x,y). centerH y centerV dicen si se debe centrar horizontal y/o verticalmente.


Un ejemplo de uso:


CFont font;

// carga la fuente.
// Nota: delante de la A hay un espacio
// Nota2: esto debe hacerse despues de haber inicializado SDL
font.load("fuente.bmp"," ABCDEFGHIJKLMNOPQRSTUVWXYZ");

// escribe "HOLA" en la posicion (0,0);
font.draw(screen, "HOLA", 0,0);

// escribe "MUNDO" en el centro de la pantalla
font.draw(screen, "MUNDO", 320/2, 240/2, true, true);



Bueno, espero que a alguien le pueda ser util.
Adjunto el código y una fuente de ejemplo.

saludos


pd. se me olvidaba decir que aunque en este ejemplo solo se usen letras mayúsculas, se pueden usar todos los caracteres, incluido acentos, signos de puntuacion, etc..