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