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