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 :

Déplacement rectangle picturebox


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Septembre 2010
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 109
    Par défaut Déplacement rectangle picturebox
    Bonjour,

    Je cherche depuis hier la solution un problème vraisemblablement très bête: faire bouger un rectangle sur l'image d'une picturebox.
    Si j'ai bien tout compris, une fois qu'on a associé un graphique à une picturebox et dessiné un rectangle dessus, l'image est transformée et on ne peut plus la faire revenir à l'état initial. Pour cela il faut recharger l'image dans la picturebox.

    Donc pour déplacer un rectangle il faut:

    1- Charger l'image
    2- Dessiner le premier rectangle
    3- Recharger l'image
    4- Dessiner le nouveau rectangle à son nouvel emplacement

    Pour information, je dessine avec la méthode drawrectangle.

    Mon problème lorsque je fais cela est que le rectangle est bien dessiné sur l'image lors du premier chargement, mais en-dessous lors du second.

    Voici mon code si quelqu'un arrive à comprendre pourquoi:

    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
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    Public Class FEN_DecoupeImage
        Dim img As Image = Image.FromFile("C:\0041511110807563026.jpg")
        Dim ObjGraph As New System.Drawing.Rectangle(200, 20, 400, 360) 'Définition d'un objet de taille de 200 x 200 à l'emplacement 100 x 100 
        Dim ObjDessin As System.Drawing.Graphics ' = PB_DecoupeImage.CreateGraphics() 'Création de l'object graphique
        Dim blackPen As New Pen(Color.Black, 10)
        Dim x As Integer
        Dim y As Integer
     
        Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click
            blackPen.Dispose()
     
            Me.Close()
        End Sub
     
        Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click
            blackPen.Dispose()
            Me.Close()
        End Sub
     
        Private Sub FEN_DecoupeImage_Load(sender As Object, e As System.EventArgs) Handles Me.Load
     
            PB_DecoupeImage.Image = img
            ObjDessin = PB_DecoupeImage.CreateGraphics
            x = 0
            y = 0
     
        End Sub
     
        Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
            ObjDessin.DrawRectangle(blackPen, ObjGraph)
        End Sub
     
     
        Private Sub PB_DecoupeImage_Click(sender As Object, e As System.EventArgs) Handles PB_DecoupeImage.Click
     
            Dim coinRect As New Point(x, y)
     
            PB_DecoupeImage.Image = Nothing
     
            ObjDessin = PB_DecoupeImage.CreateGraphics
            ObjGraph.Location = coinRect
            ObjDessin.DrawRectangle(blackPen, ObjGraph)
            PB_DecoupeImage.Image = img
            x = x + 10
            y = y + 10
     
        End Sub
     
     
        Private Sub Button3_Click(sender As System.Object, e As System.EventArgs) Handles Button3.Click
            Dim coinRect As New Point(x, y)
     
            PB_DecoupeImage.Image = Nothing
     
            ObjDessin = PB_DecoupeImage.CreateGraphics
            ObjGraph.Location = coinRect
            ObjDessin.DrawRectangle(blackPen, ObjGraph)
            PB_DecoupeImage.Image = img
            x = x - 10
            y = y - 10
     
        End Sub
     
        Private Sub Button4_Click(sender As System.Object, e As System.EventArgs) Handles Button4.Click
            Dim coinRect As New Point(x, y)
     
            PB_DecoupeImage.Image = Nothing
     
            ObjDessin = PB_DecoupeImage.CreateGraphics
            ObjGraph.Location = coinRect
            ObjDessin.DrawRectangle(blackPen, ObjGraph)
            PB_DecoupeImage.Image = img
            x = x + 10
            y = y + 10
     
     
        End Sub
    End Class
    Ce qui est curieux c'est qu'en cliquant de nouveau sur Button1, le rectangle réapparait au premier plan. Mais si je copie le code de button1 à la fin du traçage du second rectangle, ça ne le fait pas.

    Avis aux âmes charitables.

    Merci

  2. #2
    Membre extrêmement actif
    Inscrit en
    Avril 2008
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Âge : 65

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 573
    Par défaut
    bonjour pierregr ..
    Un problème vraisemblablement très bête et mechant comme d'habitude.....
    Si tu veux dessiner sur l'image(qui est un bitmap) il faut d'abord creer l'objet graphics correctement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
     ObjDessin = Graphics.FromImage(img)
    Ensuite il faut suivre ces etapes( avec "re") :
    1 /reset picbox image
    2/ reload image
    3/ recreer graphics from image
    4/ redessiner rectangle
    5/ update picbox image
    ton code amenage avec plus de lisibilte(nommage des buttons ) :

    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
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
     
     
     
     
    Public Class FEN_DecoupeImage
        'Dim img As Image = Image.FromFile("C:\0041511110807563026.jpg")
        Dim img As Image = My.Resources.giraffe
        Dim ObjGraph As New Rectangle(New Point(100, 100), New Size(200, 200)) 'Définition d'un objet de taille de 200 x 200 à l'emplacement 100 x 100 
        Dim ObjDessin As Graphics ' = PB_DecoupeImage.CreateGraphics() 'Création de l'object graphique
        Dim blackPen As New Pen(Color.Black, 10)
        Dim x As Integer
        Dim y As Integer
        Private Sub btnExitApp_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnExitApp.Click
            blackPen.Dispose()
     
            Me.Close()
        End Sub
     
        Private Sub FEN_DecoupeImage_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
     
            'reset picbox image
            PB_DecoupeImage.Image = img
     
            'graphics from image
            ObjDessin = Graphics.FromImage(img)
     
            x = 0
            y = 0
     
        End Sub
        Private Sub btnDrawRect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDrawRect.Click
            '1 reset picbox image
            PB_DecoupeImage.Image = Nothing
     
            '2 reload image
            img = My.Resources.giraffe
     
            '3  graphics from image
            ObjDessin = Graphics.FromImage(img)
            '4 dessin rectangle
            ObjDessin.DrawRectangle(blackPen, ObjGraph)
     
            ' 5 update picbox image
            PB_DecoupeImage.Image = img
        End Sub
     
        Private Sub PB_DecoupeImage_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles PB_DecoupeImage.Click
     
            '1 reset picbox image
            PB_DecoupeImage.Image = Nothing
     
            '2 reload image
            img = My.Resources.giraffe
     
            '3  graphics from image
            ObjDessin = Graphics.FromImage(img)
     
            '4 dessin rectangle
     
            Dim coinRect As New Point(x, y)
            ObjGraph = New Rectangle(coinRect, New Size(200, 200))
            ObjDessin.DrawRectangle(blackPen, ObjGraph)
     
            ' 5 update picbox image
            PB_DecoupeImage.Image = img
            x = x + 10
            y = y + 10
     
        End Sub
     
     
        Private Sub btnDisplaceRect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDisplaceRect.Click
     
     
            '1 reset picbox image
            PB_DecoupeImage.Image = Nothing
     
            '2 reload image
            img = My.Resources.giraffe
     
            '3  graphics from image
            ObjDessin = Graphics.FromImage(img)
     
            '4 dessin rectangle
     
            Dim coinRect As New Point(x, y)
            ObjGraph = New Rectangle(coinRect, New Size(200, 200))
            ObjDessin.DrawRectangle(blackPen, ObjGraph)
     
            ' 5 update picbox image
            PB_DecoupeImage.Image = img
            x = x - 10
            y = y - 10
     
        End Sub
     
     
     
     
    End Class
    bon code.....

  3. #3
    Membre confirmé
    Inscrit en
    Septembre 2010
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 109
    Par défaut
    Merci Mabrouki, je vais tenter ça.

    J'avoue que je n'arrive pas encore bien à comprendre comment on crée des graphiques. Ca me parait assez obscur.

    Pour le nom des boutons, c'est juste un test, le but étant de redessiner le rectangle à l'endroit où l'utilisateur clique sur l'image.

  4. #4
    Membre confirmé
    Inscrit en
    Septembre 2010
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 109
    Par défaut
    Bon alors là, ça marche parfaitement. Merci encore.

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

Discussions similaires

  1. rectangle de selection sur pictureBox
    Par salihovic dans le forum Windows Forms
    Réponses: 12
    Dernier message: 02/09/2010, 15h35
  2. Problème de déplacement de pictureBox
    Par FOcaL69 dans le forum Windows Forms
    Réponses: 1
    Dernier message: 14/06/2007, 17h27
  3. Déplacement et Redimensionnement d'une picturebox
    Par alys56 dans le forum VB 6 et antérieur
    Réponses: 17
    Dernier message: 01/06/2006, 10h00
  4. Réponses: 3
    Dernier message: 11/05/2006, 11h32
  5. [VB6]Déplacement PictureBox
    Par patoch76 dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 04/05/2006, 19h19

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