Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1083 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  Font / GlyphVector : étirer une chaîne dans un rectangle

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Font / GlyphVector : étirer une chaîne dans un rectangle

n°971131
raytaller
Posté le 03-02-2005 à 22:48:48  profilanswer
 

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
mood
Publicité
Posté le 03-02-2005 à 22:48:48  profilanswer
 

n°971489
machinbidu​le1974
Do you feel lucky, punk ?
Posté le 04-02-2005 à 12:23:29  profilanswer
 

En utilisant graphics.getFontMetrics().getHeight(), tu peux déterminer la largeur du texte dans la fonte courante.
 
Je sais pas si ça t'aide...


Message édité par machinbidule1974 le 04-02-2005 à 12:23:42
n°972227
raytaller
Posté le 04-02-2005 à 18:37:24  profilanswer
 

en effet c'est plus simple, mais le problème c'est que :
 
 


si on zoome sur les lettres, on remarque des espaces autour  
 
"    B      o     n         j        o       u        r    "
 
 <-------la vraie boîte prends cette taille--------------->
     <--------getHeight() me retourne celle là-------->
 


 
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.

n°972278
machinbidu​le1974
Do you feel lucky, punk ?
Posté le 04-02-2005 à 19:07:04  profilanswer
 

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... ?


Message édité par machinbidule1974 le 04-02-2005 à 19:07:47
n°972327
raytaller
Posté le 04-02-2005 à 21:13:38  profilanswer
 

bah c'est pourtant ce que je fais... je cast tout en float

n°973156
raytaller
Posté le 06-02-2005 à 12:43:01  profilanswer
 

gagné  :bounce:  :
 


 
GlyphVector gv=getFont().createGlyphVector(frc,texte.toCharArray());
Shape outline = gv.getOutline();
Rectangle2D mb=gv.getVisualBounds();
 
AffineTransform sav=graph.getTransform();
 
AffineTransform tras = new AffineTransform();
double minscale=Math.min(largeur/mb.getWidth(),hauteur/mb.getHeight());
 
tras.scale(minscale,minscale);
tras.translate(-mb.getMinX(),mb.getHeight());
 
tras.translate((x+(largeur-mb.getWidth()*minscale)*0.5)/minscale,
  (y+(hauteur-mb.getHeight()*minscale)*0.5)/minscale);
   
graph.setTransform(tras);
graph.fill(outline);
graph.setTransform(sav);
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  Font / GlyphVector : étirer une chaîne dans un rectangle

 

Sujets relatifs
[SQL] Récuperer une chaine sans les deux premieres lettres ?Etirer un background en CSS, spossible ?
[c] Comment saisir une chaine de caractères[Perl] extraction de chaine
Win32, listview control : Changer la font d'une seule colonne ?[c] transformer une chaine en entier
Histoire de chaine[Fortran 95] Conversion de types numériques en chaine de caractères
imposer une fin de chaine par une touche particulière[FONT] Format Fichier PCF
Plus de sujets relatifs à : Font / GlyphVector : étirer une chaîne dans un rectangle


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR