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

    Informations professionnelles :
    Activité : Scientist
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : mai 2013
    Messages : 97
    Points : 84
    Points
    84

    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
    13 127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : avril 2007
    Messages : 13 127
    Points : 23 932
    Points
    23 932

    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
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Scientist
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : mai 2013
    Messages : 97
    Points : 84
    Points
    84

    Par défaut

    OK. Merci.
    Je vais regarder dans cette direction (drawstring surcharge) ce soir.

    A+

  4. #4
    Membre expert
    Inscrit en
    avril 2008
    Messages
    1 981
    Détails du profil
    Informations personnelles :
    Âge : 58

    Informations forums :
    Inscription : avril 2008
    Messages : 1 981
    Points : 3 407
    Points
    3 407

    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
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Scientist
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : mai 2013
    Messages : 97
    Points : 84
    Points
    84

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