Font / GlyphVector : étirer une chaîne dans un rectangle - Java - Programmation
Marsh Posté le 04-02-2005 à 12:23:29
En utilisant graphics.getFontMetrics().getHeight(), tu peux déterminer la largeur du texte dans la fonte courante.
Je sais pas si ça t'aide...
Marsh Posté le 04-02-2005 à 18:37:24
en effet c'est plus simple, mais le problème c'est que :
|
ce qui fait que quand je dessine la chaîne, l'origine en x n'est pas en l'occurence exactement le début du "B" mais quelques pixels avant.
Le problème c'est qu'en corps de texte 200, les quelques pixels, en fonction des lettres (le pire c'est i je crois) bah c'est pas négligeable
je voudrais juste faire une sorte de fitRectangle, mais précis, au pixel près.
Marsh Posté le 04-02-2005 à 19:07:04
J'ai parlé de getHeight() mais je voulais dire getWidth(), tu l'auras compris...
Y'aurait pas un problème d'arrondi quand tu calcules le facteur de scaling ? Besoin de caster en float les largeurs avant de calculer les ratio... ?
Marsh Posté le 04-02-2005 à 21:13:38
bah c'est pourtant ce que je fais... je cast tout en float
Marsh Posté le 06-02-2005 à 12:43:01
gagné :
|
Marsh Posté le 03-02-2005 à 22:48:48
J'essaye d'afficher une chaîne de caractère sur un Graphics2D avec une police de base, de manière à ce que la chaîne affichée rentre parfaitement dans un rectangle.
Pour l'instant, je convertis la chaîne en GlyphVector, je regarde la taille, je fais un rapport, je calcule une transformation, et je crée une nouvelle font.
La taille est parfaite, mais j'ai un problème de décalage, en effet quand je récupére la taille du GlyphVector, je n'ai pas l'espacement de la première lettre par rapport à l'extrême gauche, donc la chaîne fait la taille du rectangle mais est décalée.
Je voulais savoir si y'en a qui ont déjà fait un truc du genre, et si oui, si il y avait plus simple et/ou plus précis.
GlyphVector gv=getFont().createGlyphVector(frc,texte.toCharArray());
Rectangle box = gv.getOutline().getBounds();
AffineTransform trans = new AffineTransform();
trans.scale(largeur/box.getWidth(),hauteur/box.getHeight());
Font phont2 = getFont().deriveFont(trans);
graph.setFont(phont2);
graph.drawString(texte,x,y+hauteur);
genre là avec le i de Arial, j'ai un mega décalage (propotionnel à la taille de la police)
Message édité par raytaller le 03-02-2005 à 22:49:02