next up previous contents
suivant: Simulation du remplissage de monter: Qualité graphique des caractères précédent: Qualité graphique des caractères   Table des matières

Interprète de PostScript en Java

Dans le domaine de la description vectorielle des polices de caractères la qualité de PostScript reste inégalée. Bien que celui-ci soit destiné aux imprimantes, il garde néanmoins une souplesse et une qualité de rendu que nous exploitons dans notre application. De plus, l'agrandissement (zoom) de la fenêtre de travail pose le problème des marches d'escalier qui apparaissent quand un simple affichage à grande échelle est réalisé. Pour les éviter, il faut redessinner le caractère à la bonne échelle, donc avoir une description de chaque caractère en termes de courbes et non en termes de points (selon l'opposition classique Vectorielle/bitmap) [1].

Figure 1.6: les marches d'escaliers

Un logiciel de création de polices de caractères, Fontographer, les fournit sous forme d'un fichier contenant une liste de fonctions PostScript dessinant tous les caractères à une certaine échelle. Voici par exemple la fonction du caractère '0' (de la police Sonata):

13.4445 719 m
s
13.6244 719.218 m
13.6244 719.219 l
13.7523 719.218 13.8043 719.083 13.8043 719 c
13.8043 718.918 13.7523 718.783 13.6244 718.783 c
13.4965 718.783 13.4445 718.918 13.4445 719 c
13.4445 719.083 13.4965 719.219 13.6244 719.218 c
s
13.6244 719.188 m
13.5584 719.188 13.5484 719.049 13.5484 719 c
13.5484 718.952 13.5544 718.815 13.6244 718.815 c
13.6944 718.815 13.7004 718.952 13.7004 719 c
13.7004 719.049 13.6904 719.188 13.6244 719.188 c
s
13.8043 719 m
s

Les lettres m, c, l et s sont respectivement des abréviations pour les fonctions moveto, lineto, curveto et stroke de PostScript.

Un caractère est constitué d'un ensemble de parcours disjoints (comme l'exemple ci-dessus), le caractère de la figure 1.7 est en fait défini à l'aide de deux parcours.

Figure 1.7: le zéro est formé par deux parcours disjoints

Le programme réalisé part des contours des caractères puis en extrait les valeurs numériques et les différentes fonctions (moveto, curveto, etc.). Chaque caractère est donc représenté sous la forme d'un tableau contenant les fonctions et des valeurs numériques nécessaires à son dessin. Ensuite en fonction de l'échelle d'affichage, les rapports entre les valeurs numériques sont recalculés, pour permettre le dessin du caractère à n'importe quel endroit et à n'importe quelle échelle.

Les fonctions moveto et lineto existent dans les classes de l'AWT de Java, par contre la fonction curveto n'est apparue que récemment dans la grosse API Java2D. Nous avons utilisé l'algorithme de De Casteljou [15] qui décompose une courbe de Bézier en segments de petite longueur.


next up previous contents
suivant: Simulation du remplissage de monter: Qualité graphique des caractères précédent: Qualité graphique des caractères   Table des matières
Nabil Bouzaiene 2000-07-12