IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

2D Java Discussion :

positionnement d'un texte avec drawString


Sujet :

2D Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Janvier 2008
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 12
    Par défaut positionnement d'un texte avec drawString
    Bonjour,

    Lorsque j'essaie d'imprimer du texte avec la méthode drawString de l'objet Graphics ou Graphics2D la position est donnée en pixel je pense.
    J'ai trouvé sur quelques forums que la résolution utilisée par java par défaut est 72pixel/pouce or lorsque j'essaie d'imprimer avec ces données le positionnement n'est pas correcte.

    Alors s'il vous plait si vous avez des précisions ou une idée ça serait gentil de votre part.

    Merci d'avance.

  2. #2
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Tu peux t'en sortir très facilement avec la règle de trois. Dessine un cadre autour de ce que tu veux imprimer. Ensuite dessine ta chaîne, puis imprime.
    Tu connais la taille de ton image de départ, il te suffit de mesurer la taille de l'image imprimée sur papier et d'appliquer le même ratio pour positionner ta chaîne.
    Vérifie aussi la résolution de ton imprimante.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  3. #3
    Membre habitué
    Inscrit en
    Janvier 2008
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 12
    Par défaut
    Merci dinobogan pour ta réponse.
    Mais c'est exactement ce que j'avais essayé mais rien:
    j'ai mis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    g.drawString("P1", 100, 100);
    g.drawString("P2", 200, 200);
    la je connais la distance entre les deux points.

    sur la feuille je mesure mais les deux taux sont differents, je me suis dis que le taux pour les x et les y sont differents. Mais quand j'ai ajouté un troisième point les taux sont tous différents.

    c'est vraiment bizzar!

    par contre j'ai testé avec du 96pixel/pouce et c'est plus proche du résultat.

  4. #4
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 901
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 901
    Billets dans le blog
    54
    Par défaut
    J'ignore si cela t'aidera mais il y a plusieurs choses a prendre en compte lors de la manipulation du texte :

    - l'anti-aliasing sur le texte fait que la representation graphique de la chaine peut occupere un espace different suvant que cela est actif ou non dans les RenderingHints (voir RenderingHints.KEY_TEXT_ANTIALIASING) mis le Graphics/Graphics2D.

    Nom : image1.jpg
Affichages : 55
Taille : 30,5 Ko

    -la position donnee a drawString() n'est pas le point superieur gauche de la boite englobante de la representation graphique de la chaine. Il s'agit d'un point de reference place sur la baseline (la ligne sur laquelle on ecrit dans un cahier d'ecolier).

    Le texte peut donc depasser vers le haut, cette info est donnee par l'ascent. Certains characteres peuvent depasser audessus de l'ascent cependant.

    Mais il peut egalement depasser vers le bas, cette info est donnee par le descent. Certains characteres peuvent depasser endessous du descent cependant.

    Le leading quant a lui indique l'espacement entre 2 lignes de texte.

    Height ou la hauteur du texte represente la somme ascent+descent+leading.

    Advance est une autre valeur qui represente la distance horizontale le character actuel et le suivant (voir FontMetrics).

    La classe Font permet de retrouver toutes ces informations avec deux methodes fortes utiles :
    - getStringBounds(String s, FontRenderContext fc) retourne le Rectangle2D qui est la boite englobante de la chaine qu'on veut rendre en tenant compte de l'advance, de l'ascent, du descent et du leading (attention dans certaines langues, le texte peut toutefois sortir de sa boite englobante).
    - getLineMetrics(String s, FontRenderContext fc) retourne l'objet LineMetrics (permet de connaitre l'ascent, descent, leading, height et autres informations) de la chaine qu'on veut rendre.

    PS : generalement on va utiliser le FontRenderContext du Graphics surlequel on est entrain de dessiner.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

Discussions similaires

  1. Wrap de text avec Graphics.DrawString
    Par olibara dans le forum C#
    Réponses: 0
    Dernier message: 16/12/2008, 12h49
  2. [FPDF] positionner du texte avec fpdf
    Par HwRZxLc4 dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 18/05/2007, 13h02
  3. problème de passage de texte avec getvariable
    Par VincentB dans le forum Flash
    Réponses: 2
    Dernier message: 12/01/2004, 18h35
  4. afficher texte avec retour chariot aprèq requète sql
    Par frenchy371 dans le forum Requêtes
    Réponses: 2
    Dernier message: 07/01/2004, 17h33
  5. Réponses: 4
    Dernier message: 16/01/2003, 15h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo