bonjour,

l'idée est de permettre à un utilisateur
1) de choisir une image dans sa bibliothèque et de l'afficher dans un picturebox
2) de choisir une partie de l'image avec son curseur
3) de lui indiquer la partie sélectionnée avec un rectangle en pointillé.
4) de cloner cette partie sélectionnée et de la mettre dans un deuxième picturebox pour sauvegarde

après près de trois semaines de test , recherche et essai j'arrive a résoudre les trois premières parties.

mais la quatrième donne une image complétement décalée par rapport au cadre sélectionné.

et la je sèche lamentablement.

si quelqu'un peut me donner une explication, elle sera la bienvenue.

voila le code en cause:

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
    Private Sub PictureBox2_MouseDown(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles PictureBox2.MouseDown
        souris_deb_X = e.X
        souris_deb_y = e.Y
        PictureBox2.Refresh()
    End Sub
    Private Sub PictureBox2_MouseUp(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles PictureBox2.MouseUp
        souris_fin_X = e.X
        souris_fin_Y = e.Y
        If souris_fin_X - souris_deb_X = 0 Then Exit Sub
        Dim newImage = New Bitmap(PictureBox2.Image)
        ' entourer la partie selectionnee par user
        Dim g As Graphics = PictureBox2.CreateGraphics()
        Dim RecCoul As Pen = New Pen(Color.Blue, 2)
        Dim Rectsource As New Rectangle(souris_deb_X, souris_deb_y, souris_fin_X - souris_deb_X, souris_fin_Y - souris_deb_y)
        RecCoul.DashStyle = System.Drawing.Drawing2D.DashStyle.DashDot
        g.DrawRectangle(RecCoul, Rectsource)
        Dim RectsourceNEW As New Rectangle(souris_deb_X, souris_deb_y, PictureBox1.Width, PictureBox1.Height)
        'rectangle apparait comme demandé par user
        ' Clone de la partie correspondant au rectangle
        Dim NewImage2 = newImage.Clone(RectsourceNEW, newImage.PixelFormat)
        newImage.Dispose()
        Dim FicSor = Application.StartupPath & "\Temp1.jpg"
        PictureBox1.Image = NewImage2
        PictureBox1.Image.Save(FicSor)
        PictureBox1.SizeMode = PictureBoxSizeMode.Zoom
        PictureBox1.Visible = True
    End Sub
merci d'avance