[VB.net] Changer l'image d'une PictureBox et sauvegarder se changement [Résolu]

Signaler
Messages postés
54
Date d'inscription
lundi 2 novembre 2009
Statut
Membre
Dernière intervention
7 août 2012
-
Messages postés
54
Date d'inscription
lundi 2 novembre 2009
Statut
Membre
Dernière intervention
7 août 2012
-
Bonjour, alors je vous explique mon cas, j'ai une Form, avec une PictureBox, qui contient une image par défaut dedans, mais je voudrait que l'utilisateur puisse changer et choisir une image, comme un avatar pour un jeu vidéo, chaque utilisateur mettra son image. Pour cela j'ai codé la fonction qui change le contenu de la PictureBox et qui enregistre le nouvel avatar dans le dossier racine, pour la prochaine utilisation du programme, par l'utilisateur. Donc au démarrage je voudrais charger cette image dans la PictureBox, et c'est là que se situe le drame.

Voici mon code:

Private Sub menu_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        If System.IO.File.Exists("./avatar2.png") Then
            File.Copy("./avatar2.png", "./avatar.png")
            PictureBox7.Image = Image.FromFile("./avatar.png")
            File.Delete("./avatar2.png") ' L'erreur se situe ici
        ElseIf System.IO.File.Exists("./avatar.png") Then
            PictureBox7.Image = Image.FromFile("./avatar.png")
        End If
End Sub

    Private Sub Button100_Click(sender As System.Object, e As System.EventArgs) Handles Button100.Click
        If OpenFileDialog1.ShowDialog() = DialogResult.OK Then
            Dim Fs As FileStream = New FileStream(OpenFileDialog1.FileName, FileMode.Open, FileAccess.Read)
            Dim Value() As Byte = New Byte(Fs.Length) {}
            Fs.Read(Value, 0, Fs.Length)
            Fs.Close()
            File.Copy(OpenFileDialog1.FileName, "./avatar2.png")
            PictureBox7.Image = Image.FromFile("./avatar2.png")
            If System.IO.File.Exists("./avatar.png") Then
                File.Delete("./avatar.png")
            End If
        End If
    End Sub


Voici mon erreur:
Le processus ne peut pas accéder au fichier 'D:\...\avatar2.png', car il est en cours d'utilisation par un autre processus.

Je ne peut pas supprimer l'image car la Form s'en sert, soit disant... Vu que juste avant je fais ceci "PictureBox7.Image = Image.FromFile("./avatar.png")" donc je ne comprend pas, si vous pouviez m'aider.

Merci beaucoup.

7 réponses


Bonsoir,

Tu ne charges pas l'image de la bonne manière dans le picturebox (celle-ci n'est pas libérée).
Charge la plutôt depuis un stream automatiquement fermé après utilisation par l'instruction Using :
Using monstream As New IO.FileStream(Application.StartupPath & "\avatar2.png", IO.FileMode.Open)
     PictureBox1.Image = Image.FromStream(monstream)
End Using
File.Delete(Application.StartupPath & "\avatar2.png")
Messages postés
219
Date d'inscription
mercredi 26 octobre 2011
Statut
Membre
Dernière intervention
22 juin 2017
9
Bonjour,

Je ne vois pas pourquoi, mais si tu supprimes les deux lignes (une à la fois) ça donne quoi ?

If System.IO.File.Exists("./avatar2.png") Then
            'File.Copy("./avatar2.png", "./avatar.png")
            'PictureBox7.Image = Image.FromFile("./avatar.png")
            File.Delete("./avatar2.png") ' L'erreur se situe ici
        ElseIf System.IO.File.Exists("./avatar.png") Then
            PictureBox7.Image = Image.FromFile("./avatar.png")
        End If


Bonne journée



Faites simple, aussi simple que possible, mais pas simpliste.
A. Einstein.
Messages postés
54
Date d'inscription
lundi 2 novembre 2009
Statut
Membre
Dernière intervention
7 août 2012

Ben si j'enlève cette ligne là
PictureBox7.Image = Image.FromFile("./avatar.png")

C'est normal que je ne pourrais pas supprimer "avatar2.png" car ce sera encore celle là qui sera utilisé par ma PictureBox7 et non "avatar.png".
Messages postés
54
Date d'inscription
lundi 2 novembre 2009
Statut
Membre
Dernière intervention
7 août 2012

J'ai aussi essayé le code suivant, qui est beaucoup plus simple, mais ne marche pas non plus :(

    Private Sub menu_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
           If System.IO.File.Exists("./avatar.png") Then
               PictureBox7.Image = Image.FromFile("./avatar.png")
           End If
    End Sub

    Private Sub Button100_Click(sender As System.Object, e As System.EventArgs) Handles Button100.Click
        If OpenFileDialog1.ShowDialog() = DialogResult.OK Then
            Dim Fs As FileStream = New FileStream(OpenFileDialog1.FileName, FileMode.Open, FileAccess.Read)
            Dim Value() As Byte = New Byte(Fs.Length) {}
            Fs.Read(Value, 0, Fs.Length)
            Fs.Close()
            PictureBox7.Image = Nothing
            Delete()
            File.Copy(OpenFileDialog1.FileName, "./avatar.png")
            PictureBox7.Image = Image.FromFile("./avatar.png")
        End If
    End Sub


    Private Sub Delete()
        File.Delete("./avatar.png")
    End Sub


En théorie le "PictureBox7.Image = Nothing" devrait me permettre de faire n'importe quelle opération sur avatar.png, vu que je ne m'en sert plus... là je sèche vraiment.
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
49
Salut
j'ai copié ton code

Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
  Try
      If System.IO.File.Exists(Application.StartupPath & "\avatar2.png") Then
                File.Copy(Application.StartupPath & "\avatar2.png", Application.StartupPath & "\avatar.png")
                PictureBox1.Image = Image.FromFile("./avatar.png")
                File.Delete(Application.StartupPath & "\avatar2.png") ' L'erreur se situe ici
            ElseIf System.IO.File.Exists(Application.StartupPath & "\avatar.png") Then
                PictureBox1.Image = Image.FromFile("./avatar.png")
            End If
  Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
        

    End Sub



je n'ai pas eu d'erreur
je n'ai compris pourquoi tu ne charges pas directement avatar2 dans le picturebox ?
quelle est la taille d'avatar2 ?
Messages postés
54
Date d'inscription
lundi 2 novembre 2009
Statut
Membre
Dernière intervention
7 août 2012

L'erreur survient lorsque je ferme l'application, que je la reouvre et que je veux rechanger l'image.
Le problème ne vient pas de la taille de l'image, j'y ai déjà pensé.
Messages postés
54
Date d'inscription
lundi 2 novembre 2009
Statut
Membre
Dernière intervention
7 août 2012

Merci, c'était exactement ça, je désallouée pas l'image, mais je n'avais aucune idée de comment m'y prendre.
Merci encore banana32 !