2008-09-27 6 views
1

Comment faites-vous vos propres polices? Je ne veux pas d'un algorithme de poids lourd (freetype, truetype, adobe, etc) et serait bien avec les polices bitmap pré-rendues.Routines graphiques de polices

Je veux anti-aliasing, et voudrais des polices proportionnelles si possible.

Je l'ai entendu dire que je peux utiliser pour faire le Gimp rendu (avec un peu de post-traitement?)

Je développe un appareil embarqué avec un écran LCD. Il a un processeur 32 bits, mais je ne veux pas exécuter Linux (trop de code/espace de données pour trop peu de fonctionnalités que je voudrais utiliser)

C. C++ si nécessaire, mais C est préféré. Des algorithmes et des idées/concepts sont très bien dans toutes les langues ...

-Adam

+0

Qu'est-ce que les fontes à faire avec C? Si vous ne voulez pas calculer les dimensions de police, etc., vous devez dessiner des polices bitmap - vous n'avez donc qu'à faire de la magie graphique. – unexist

Répondre

4

Dans mes vieux jours-scène de démonstration je dessinais souvent tous les caractères de la police dans une grande image bitmap. Dans le code, j'ai stocké les coordonnées (X, Y) de chaque caractère dans la police, ainsi que la largeur de chaque caractère. La hauteur était généralement constante dans toute la police. Si l'espace n'est pas un problème, vous pouvez mettre tous les caractères dans une grille, c'est-à-dire avoir une distance constante entre le coin supérieur gauche de chaque caractère.

Le rendu du texte consiste alors à copier une lettre à la fois vers la position de destination. A cette époque, je réservais généralement une couleur comme étant la couleur "transparente", mais vous pouvez certainement utiliser un canal alpha pour cela aujourd'hui.

Une approche plus simple, qui peut être utilisé pour les petites b polices/w, est de définir les caractères directement dans le code:

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

Le format de fichier XPM est en fait un format de fichier avec la syntaxe C qui peut être utilisé comme une solution hybride pour stocker les caractères.

1

Les polices bitmap pré-rendues sont probablement la solution. Rendez votre police à l'aide de n'importe quoi, placez les caractères dans une grille et enregistrez l'image dans un format simple non compressé comme PPM, BMP ou TGA. Si vous voulez anti-crénelage, assurez-vous d'utiliser un format qui prend en charge la transparence (BMP et TGA font, pas PPM). Pour prendre en charge les largeurs proportionnelles, vous devez extraire les largeurs de chaque caractère de la grille. Il n'y a pas de moyen simple de le faire, cela dépend de la façon dont vous générez la grille. Vous pourriez probablement écrire un petit programme pour analyser chaque caractère et trouver la limite minimale. Une fois que vous avez les données de largeur, vous le placez dans un fichier auxiliaire qui contient les coordonnées et les tailles de chaque caractère. Enfin, pour rendre une chaîne, vous recherchez chaque caractère et faites un bitblit de son rectangle à partir du bitmap de police sur votre tampon de trame, en avançant la position du raster par la largeur du caractère.

1

Nous avons utilisé avec succès le package SRGP pour les polices. Nous avons utilisé des polices à espacement fixe, donc je ne suis pas sûr que les polices soient proportionnelles.

1

Nous utilisons des polices bitmap générées par le générateur de polices bitmap de anglecode #:

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

Ceci est très utile car il a une sortie XML qui sera facile à convertir en tout format de données dont vous avez besoin.

Le code bmfont d'Angel Code ajoute également du crénage et un meilleur compactage à l'ancienne alternative MudFont.