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

Messages postés
54
Date d'inscription
lundi 2 novembre 2009
Dernière intervention
7 août 2012
- - Dernière réponse : gege1505
Messages postés
54
Date d'inscription
lundi 2 novembre 2009
Dernière intervention
7 août 2012
- 18 déc. 2011 à 21:23
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.
Afficher la suite 

Votre réponse

7 réponses

Meilleure réponse
3
Merci
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")

Merci Utilisateur anonyme 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 100 internautes ce mois-ci

Commenter la réponse de Utilisateur anonyme
Messages postés
219
Date d'inscription
mercredi 26 octobre 2011
Dernière intervention
22 juin 2017
0
Merci
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.
Commenter la réponse de cgandco
Messages postés
54
Date d'inscription
lundi 2 novembre 2009
Dernière intervention
7 août 2012
0
Merci
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".
Commenter la réponse de gege1505
Messages postés
54
Date d'inscription
lundi 2 novembre 2009
Dernière intervention
7 août 2012
0
Merci
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.
Commenter la réponse de gege1505
Messages postés
3241
Date d'inscription
jeudi 26 novembre 2009
Dernière intervention
26 novembre 2018
0
Merci
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 ?
Commenter la réponse de cs_ShayW
Messages postés
54
Date d'inscription
lundi 2 novembre 2009
Dernière intervention
7 août 2012
0
Merci
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é.
Commenter la réponse de gege1505
Messages postés
54
Date d'inscription
lundi 2 novembre 2009
Dernière intervention
7 août 2012
0
Merci
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 !
Commenter la réponse de gege1505

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.