Pregunta

¿Cómo haces tus propias fuentes? No quiero un algoritmo pesado (freetype, truetype, adobe, etc.) y estaría bien con las fuentes de mapa de bits pre-renderizadas.

Quiero antialiasing, y me gustaría fuentes proporcionales si es posible.

He oído que puedo usar Gimp para hacer el renderizado (¿con algún procesamiento posterior?)

Estoy desarrollando para un dispositivo integrado con un LCD. Tiene un procesador de 32 bits, pero no quiero ejecutar Linux (exageración: demasiado espacio de código / datos para una funcionalidad muy pequeña que yo usaría)

C. C ++ si es necesario, pero se prefiere C. Los algoritmos e ideas / conceptos están bien en cualquier idioma ...

-Adam

¿Fue útil?

Solución

En mis viejos días de escenas de demostración, a menudo dibujaba todos los caracteres de la fuente en una imagen de mapa de bits grande. En el código, almacené las coordenadas (X, Y) de cada carácter en la fuente, así como el ancho de cada carácter. La altura era generalmente constante en toda la fuente. Si el espacio no es un problema, puede colocar todos los caracteres en una cuadrícula, es decir, tener una distancia constante entre la esquina superior izquierda de cada carácter.

La representación del texto se convierte en una cuestión de copiar una letra a la vez en la posición de destino. En ese momento, solía reservar un color como el " transparente " color, pero definitivamente podrías usar un canal alfa para esto hoy.

Un enfoque más simple, que se puede usar para fuentes b / w pequeñas, es definir los caracteres directamente en el código:

LetterA  db 01111100b
         db 11000110b
         db 11000110b
         db 11111110b
         db 11000110b
         db 11000110b

El formato de archivo XPM es en realidad un formato de archivo con sintaxis C que se puede utilizar como una solución híbrida para almacenar los caracteres.

Otros consejos

Las fuentes de mapa de bits pre-renderizadas son probablemente el camino a seguir. Renderice la fuente utilizando lo que sea, organice los caracteres en una cuadrícula y guarde la imagen en un formato simple sin comprimir como PPM, BMP o TGA. Si desea usar antialias, asegúrese de usar un formato que admita la transparencia (BMP y TGA sí; PPM no).

Para admitir anchos proporcionales, deberás extraer los anchos de cada carácter de la cuadrícula. No hay una forma sencilla de hacerlo, depende de cómo genere la cuadrícula. Probablemente podrías escribir un pequeño programa corto para analizar cada personaje y encontrar el cuadro delimitador mínimo. Una vez que tenga los datos de ancho, póngalos en un archivo auxiliar que contiene las coordenadas y los tamaños de cada carácter.

Finalmente, para representar una cadena, busca cada carácter y bitblit su rectángulo del mapa de bits de la fuente en tu búfer de cuadros, avanzando la posición de la trama por el ancho del carácter.

Hemos utilizado con éxito el paquete SRGP para las fuentes. Usamos fuentes de paso fijo, por lo que no estoy seguro de que sean fuentes proporcionales.

Estamos utilizando fuentes de mapa de bits generadas por el generador de fuentes de mapa de bits de #sigger #:

http://www.angelcode.com/products/bmfont/

Esto es muy útil ya que tiene una salida XML que será fácil de convertir a cualquier formato de datos que necesite.

El bmfont de Angel Code también agrega kerning y un mejor empaque a la antigua alternativa que era MudFont.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top