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

VB.NET Discussion :

Positionnement Date en utilisant Graphics.FromImage(img)


Sujet :

VB.NET

  1. #1
    Membre régulier
    Homme Profil pro
    Scientist
    Inscrit en
    Mai 2013
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Scientist
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2013
    Messages : 110
    Points : 87
    Points
    87
    Par défaut Positionnement Date en utilisant Graphics.FromImage(img)
    Bonjour,

    J'utilise le code suivant pour mettre une date (annee seulement) sur une image (1200x800px):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Using g As Graphics = Graphics.FromImage(img)
             g.DrawString(txtSelectedYear.Text, New Font("Times New Roman", 120, FontStyle.Bold), New SolidBrush(Color.Black), 800, 600)
    End Using
    Suivant le font que j'utilise, la date peut se trouver partiellement en dehors de l'image. Pas de probleme ici avec Font("Times New Roman", 120, FontStyle.Bold).
    Les coordonnees (800,600) correspondent a (top, left).

    Est-il possible par code de positionner la date par rapport a (bottom, right) de facon a supprimer ce probleme?
    Ou doit-on considerer la taille de chaque caractere du Font, ce qui augmente considerablement le defi?
    Ou utiliser une langue ou on ecrit de droite a gauche (changement de repere), mais je delire peut-etre?

    Bref, je cherche une idee simple, si toutefois cela existe.

    Merci...
    A+

  2. #2
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    drawstring a plein de surcharges
    l'une d'elle demande un stringformat il me semble, qui permet de spécifier dans un rectangle où se trouve le string (horizontal+vertical alignment)

    de plus il est possible de mesurer avant drawstring pour savoir si ca va passer (graphics.measurestring / controlrenderer.measuretext)
    sinon tu peux alors baisser la font (while)

    rappel au cas où :
    une surcharge est une méthode avec le même nom mais une signature différente
    la signature d'une méthode est définie par ses paramètres en nombre et en type
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre régulier
    Homme Profil pro
    Scientist
    Inscrit en
    Mai 2013
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Scientist
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2013
    Messages : 110
    Points : 87
    Points
    87
    Par défaut
    OK. Merci.
    Je vais regarder dans cette direction (drawstring surcharge) ce soir.

    A+

  4. #4
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 441
    Points
    4 441
    Par défaut
    bonjour

    Come dit par Pol63 ,la solution se trouve dans Graphics.MeasureString et un peu de calcul et un bout de papier....

    exemple code vb qui décale le rectangle de présentation de la chaine("layout"):

    code .vb du form exemple(un panel scrollable est utilisé pour dessiner un image factice):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
     
    Public Class Form1
        Private img As Bitmap = Nothing
        Private topleft As Point
        Public Sub New()
     
            ' Cet appel est requis par le concepteur.
            InitializeComponent()
     
            ' Ajoutez une initialisation quelconque après l'appel InitializeComponent().
            Me.AutoScroll = True 'assure le defilement du panel
     
        End Sub
        Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
            topleft = New Point(800, 600)
            Dim txtYear As String = Date.Now.Year.ToString()
     
            Dim rect As New Rectangle(0, 0, 1200, 800)
            img = New Bitmap(rect.Width, rect.Height)
            Me.Panel1.Size = img.Size 'panel est ajuste pour afficher la totalité de l'image
     
            Using grfx As Graphics = Graphics.FromImage(img)
                Using fnt As New Font("Times New Roman", 240, FontStyle.Bold)
                    Dim sizeString As SizeF = grfx.MeasureString(txtYear, fnt)
     
                    'rectangle de presentation
                    Dim layout As New Rectangle(topleft, Size.Ceiling(sizeString))
     
                    ' on decale l'img quelque soit la taille du string
                    If layout.Right > img.Width Then
                        layout.X -= layout.Right - img.Width
                    End If
                    If layout.Bottom > img.Height Then
                        layout.Y -= layout.Bottom - img.Height
                    End If
     
     
                    grfx.FillRectangle(Brushes.Aquamarine, rect)
                    grfx.DrawString(
                        txtYear,
                        New Font("Times New Roman", 240, FontStyle.Bold),
                        New SolidBrush(Color.Black),
                        layout)
                    'dessin du rectangle de presentation
                    Using thepen As New Pen(Brushes.Red, 2.0)
                        grfx.DrawRectangle(thepen, layout)
                    End Using
                End Using
            End Using
     
     
            Me.Panel1.Invalidate()
     
        End Sub
        Private Sub Panel1_Paint(sender As System.Object, e As System.Windows.Forms.PaintEventArgs) Handles Panel1.Paint
            Dim gr As Graphics = e.Graphics
            If img Is Nothing Then Return
     
            gr.DrawImage(img, 0, 0)
        End Sub
    End Class
    bon code...

  5. #5
    Membre régulier
    Homme Profil pro
    Scientist
    Inscrit en
    Mai 2013
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Scientist
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2013
    Messages : 110
    Points : 87
    Points
    87
    Par défaut
    Bonjour,

    CA MARCHE! Le code fourni par Mabrouki m'a beaucoup aide.
    J'ai juste ajoute une messageBox pour avertir quand le string sort de l'image a gauche (ou moins probablement en haut), car j'ai l'intention de faire varier le text et le font.

    J'avoue que la direction de Pol63 est certainement la bonne, mais j'aurais rame un peu plus avant d'arriver a mon but.
    Interessant aussi de comparer (via infos sur internet) graphics.measurestring et controlrenderer.measuretext.

    Bref, merci encore pour votre aide.

    A+
    JLuc01

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. WPF / Equivalent Graphics.FromImage
    Par theMonz31 dans le forum C#
    Réponses: 5
    Dernier message: 22/04/2009, 16h23
  2. [PEAR] Date avec utilisation de Spreadsheet excel writer
    Par xianxian620 dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 11/06/2008, 11h03
  3. [POO] positionner un objet,utiliser style.height
    Par libuma dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 06/06/2008, 16h55
  4. Réponses: 5
    Dernier message: 04/12/2007, 08h07
  5. Positionnement div et utilisation <p>
    Par GogNav dans le forum Mise en page CSS
    Réponses: 5
    Dernier message: 01/05/2007, 09h07

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