none
Rotation de Texte en mode Graphics RRS feed

  • Question

  • Bonjour,

    Sous VS 2010, VB.NET, Framework 4.0, dans une appli WinForm je voudrais écrire du texte incliné (à 90°) dans un contrôle graphique tel une PictureBox.

    S'il est facile d'écrire horizontalement avec un g.DrawString(...), comment incliner le texte suivant un angle déterminé  (90° dans mon cas) ?

    Merci de votre réponse.

    Cordialement


    Alain

    lundi 2 juillet 2012 19:52

Réponses

  • Graphics possède des méthodes RotateTransform, TranslateTransform, ScaleTransform & co.

    Donc pour écrire à 90°, il faut faire un RotateTransform de...90° ;-)

    Maintenant, pour éviter de se perdre, il est bon de sauvegarder son état de de le restaurer avec Save et Restore(GaphicsState).

    En gros, avant de faire des opérations de transformation, sauvegarder l'état dans un GraphicsState avec la méthode Save.
    Faites toutes les transformations que vous voulez.
    Faites un Restore pour revenir à l'état "normal", initial.
    Puis vous pouvez recommencer ainsi de suite.

    L'idée est donc d'utiliser un référentiel temporaire pour ses dessins. C'est plus pratique ;-)


    Richard Clark
    Consultant - Formateur .NET
    http://www.c2i.fr
    Depuis 1996: le 1er site .NET francophone

    • Marqué comme réponse AchLog mardi 3 juillet 2012 16:58
    mardi 3 juillet 2012 09:06

Toutes les réponses

  • Graphics possède des méthodes RotateTransform, TranslateTransform, ScaleTransform & co.

    Donc pour écrire à 90°, il faut faire un RotateTransform de...90° ;-)

    Maintenant, pour éviter de se perdre, il est bon de sauvegarder son état de de le restaurer avec Save et Restore(GaphicsState).

    En gros, avant de faire des opérations de transformation, sauvegarder l'état dans un GraphicsState avec la méthode Save.
    Faites toutes les transformations que vous voulez.
    Faites un Restore pour revenir à l'état "normal", initial.
    Puis vous pouvez recommencer ainsi de suite.

    L'idée est donc d'utiliser un référentiel temporaire pour ses dessins. C'est plus pratique ;-)


    Richard Clark
    Consultant - Formateur .NET
    http://www.c2i.fr
    Depuis 1996: le 1er site .NET francophone

    • Marqué comme réponse AchLog mardi 3 juillet 2012 16:58
    mardi 3 juillet 2012 09:06
  • Merci Richard pour ces bonnes indications.

    La manipulation des ces fonctions n'est pas très aisée à partir de leur seule description dans MSDN.

    Existe t'il, à votre connaissance, un petit tutoriel ou quelques chose comme cela qui précise leur fonctionnement ?

    Merci


    Alain

    mardi 3 juillet 2012 14:38
  • Y'a bien mon livre (Au coeur de Visual Basic .NET) mais il est épuisé (comme moi aujourd'hui ;-)).

    Richard Clark
    Consultant - Formateur .NET
    http://www.c2i.fr
    Depuis 1996: le 1er site .NET francophone

    mardi 3 juillet 2012 14:47
  • Alors c'est sans espoir ?

    Reposez-vous quand même et c'est très aimable de répondre à mon message dans ces conditions.

    J'ai un Petzold qui traite de GDI+, très bien écrit, mais malheureusement pas avec moi en ce moment...

    Bien cordialement


    Alain

    mardi 3 juillet 2012 16:57
  • Pour ceux qui, comme moi, se posent des questions, voici à titre d'exemple le code que j'ai réalisé :

        Private Sub RotateTexte(ByVal g As Graphics)
            g.DrawString("Bonjour", Font, Brushes.Blue, New PointF(0, 0))
    
            ' Sauver l'état du contexte graphique
            Dim transState As GraphicsState = g.Save()
    
            '-- Modifier le contexte graphique
            g.TranslateTransform(0, 180)    ' Translate de 180 pixels vers le bas
            g.RotateTransform(-90.0F)       ' Rotate de 90° dans le sens trigo
    
            '-- Utiliser le nouveau contexte graphique
            g.DrawString("Bonjour 1", Font, Brushes.Red, New PointF(0, 0))
            g.DrawString("Bonjour 2", Font, Brushes.Red, New PointF(0, 20))
            g.DrawString("Bonjour 3", Font, Brushes.Red, New PointF(0, 40))
    
            ' Restaure le contexte graphique initial
            g.Restore(transState)
    
        End Sub
    

    Merci Richard pour m'avoir mis sur la piste.


    Alain

    mercredi 4 juillet 2012 17:38
  • Champagne ;-)

    Richard Clark
    Consultant - Formateur .NET
    http://www.c2i.fr
    Depuis 1996: le 1er site .NET francophone

    jeudi 5 juillet 2012 06:24
  • Avec plaisir, si vous passez par Saint-Briac cet été.


    Alain

    jeudi 5 juillet 2012 06:41