Question

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

Je souhaite un anti-aliasing et, si possible, des polices proportionnelles.

J'ai entendu dire que je pouvais utiliser Gimp pour effectuer le rendu (avec certains post-traitements?)

Je développe pour un appareil intégré avec un écran LCD. Il a un processeur 32 bits, mais je ne veux pas utiliser Linux (overkill - 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é. Les algorithmes et les idées / concepts conviennent à toutes les langues ...

-Adam

Était-ce utile?

La solution

Dans mon ancienne vie de 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 de 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 placer tous les caractères dans une grille, c’est-à-dire conserver 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. À cette époque, j’avais l'habitude de réserver une couleur comme étant la couleur "transparente". couleur, mais vous pouvez certainement utiliser un canal alpha pour cela aujourd'hui.

Une approche plus simple, qui peut être utilisée pour les petites polices n / b, consiste à 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 une syntaxe C qui peut être utilisé comme solution hybride pour stocker les caractères.

Autres conseils

Les polices bitmap prédéfinies sont probablement la solution. Rendez votre police en utilisant ce que vous voulez, organisez les caractères dans une grille et enregistrez l'image dans un format non compressé comme PPM, BMP ou TGA. Si vous souhaitez utiliser l'anticrénelage, veillez à utiliser un format prenant en charge la transparence (BMP et TGA, contrairement à PPM).

Pour prendre en charge les largeurs proportionnelles, vous devez extraire les largeurs de chaque caractère de la grille. Il n’ya pas de moyen simple de le faire, cela dépend de la façon dont vous générez le réseau. Vous pourriez probablement écrire un petit programme pour analyser chaque personnage et trouver le cadre minimal. Une fois que vous avez les données de largeur, vous les placez dans un fichier auxiliaire contenant les coordonnées et la taille de chaque caractère.

Enfin, pour restituer une chaîne, vous recherchez chaque caractère et son rectangle bitblit dans la police sur la mémoire tampon d'images, en faisant avancer la position du raster de la largeur du caractère.

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

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

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

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

Le bmfont d’Angel Code ajoute également le crénage et un meilleur conditionnement à l’ancienne alternative qui était MudFont.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top