Erreur lors de la sauvegarde picturebox [Résolu]

Messages postés
35
Date d'inscription
samedi 15 décembre 2018
Statut
Membre
Dernière intervention
15 janvier 2019
-
Bonjour, je suis débutant et je viens d'avoir une erreur dans mon code lors de la sauvegarde de mon image:
Une exception non gérée du type 'System.Runtime.InteropServices.ExternalException' s'est produite dans System.Drawing.dll

Informations supplémentaires : Une erreur générique s'est produite dans GDI+.

D’où cela peut'il venir ?

 ' sauve logo dans chemin appli
' Inscrire le nom du dossier de l'image
Dim file_name As String = Application.ExecutablePath
file_name = file_name.Substring(0, file_name.LastIndexOf("\bin")) &
"\LogoSociete."
' Recevoir l'image
Dim bm As Bitmap = PicBoxLogo.Image
' Sauvez l'image en bitmap.
bm.Save(file_name & "bmp", System.Drawing.Imaging.ImageFormat.Bmp)


Merci à vous
Afficher la suite 

7 réponses

Messages postés
14030
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
8 décembre 2019
322
0
Merci
Bonjour

voici ma procédure pour poster un code correctement lisible
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code

Pour travailler avec les chemins de fichiers, je te conseille d'utiliser l'objet Path dans System.IO
https://docs.microsoft.com/fr-fr/dotnet/api/system.io.path?view=netframework-4.7.2

Ensuite, mets un point d'arrêt à la ligne
bm.Save(file_name & "bmp", System.Drawing.Imaging.ImageFormat.Bmp)

Vérifie le contenu de bl, puis de file_name, et enfin ce que donne
file_name & "bmp"
(manquerait un . que ça ne m'étonnerais pas)
Commenter la réponse de Whismeril
Messages postés
35
Date d'inscription
samedi 15 décembre 2018
Statut
Membre
Dernière intervention
15 janvier 2019
0
Merci
Merci pour ton aide: attention je débute (1 mois).

Voilà le code complet:

   Private Sub BtnSauvClient_Click(sender As Object, e As EventArgs) Handles BtnSauvClient.Click

        'sauvegarder un artisan

        Dim sauve As New SaveFileDialog
        sauve.Filter = "Texte|*.artisan"
        If sauve.ShowDialog = 1 Then  'utilisateur a t'il choisi un chemin
            TBoxChemArti.Text = sauve.FileName

            ' sauvegarde du flux des textbox dans fichier

            Dim StrWrite As New System.IO.StreamWriter(TBoxChemArti.Text)

            StrWrite.WriteLine(TexBox1Vous.Text)
            StrWrite.WriteLine(TexBox2Vous.Text)
            StrWrite.WriteLine(TexBox3Vous.Text)
            StrWrite.WriteLine(TexBox4Vous.Text)
            StrWrite.WriteLine(TexBox5Vous.Text)
            StrWrite.WriteLine(TexBox6Vous.Text)
            StrWrite.WriteLine(TexBox7Vous.Text)
            StrWrite.WriteLine(TexBox8Vous.Text)
            StrWrite.WriteLine(TexBox9Vous.Text)
            StrWrite.WriteLine(TexBox10Vous.Text)
            StrWrite.WriteLine(TexBox11Vous.Text)


            'Fermeture du flux
            StrWrite.Close()
        End If

        ' sauve logo dans chemin appli
        ' Inscrire le nom du dossier de l'image
        Dim file_name As String = Application.ExecutablePath
        file_name = file_name.Substring(0, file_name.LastIndexOf("\bin")) &
        "\LogoSociete."
        ' Recevoir l'image
        Dim bm As Bitmap = PicBoxLogo.Image
        ' Sauvez l'image en bitmap.
        bm.Save(file_name & "bmp", System.Drawing.Imaging.ImageFormat.Bmp)

    End Sub


Une image (jpg ou autre) chargée dans le pcturebox en est bien sauvegardée en bmp.

Le code plante en fait (je viens de tester) si je clique sur le bouton "annuler" lors de l'enregistrement avec la boite "SaveFileDialog".

Qu'est-ce qu'un point d'arrêt?
Commenter la réponse de paulhochon
Messages postés
14030
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
8 décembre 2019
322
0
Merci
Hum, vu la couleur de ton code, je pense que tu n'as pas choisi "basic", mais bon c'est déjà plus lisible que le premier.

Le code plante en fait (je viens de tester) si je clique sur le bouton "annuler" lors de l'enregistrement avec la boite "SaveFileDialog".

Logique, tu as mis le code de sauvegarde en dehors du if, donc il est exécuté mais si tu annules.

Qu'est-ce qu'un point d'arrêt?

Apprendre le langage c'est une chose, il faut aussi apprendre à ce servir de ton IDE.
Je suppose qu'il s'agit de Visual Studio https://docs.microsoft.com/fr-fr/visualstudio/debugger/using-breakpoints?view=vs-2017
L'exemple se sert d'un code C#, mais c'est pareil en VB.Net

Commenter la réponse de Whismeril
Messages postés
35
Date d'inscription
samedi 15 décembre 2018
Statut
Membre
Dernière intervention
15 janvier 2019
0
Merci
Merci; je viens de replacer mon "end if" à la fin (des copier/coller malheureux) et bien sur, cela fonctionne.

ok pour le point d’arrêt pour le débogage pas à pas.

Je progresse doucement mais pour moi la meilleure façon d'apprendre est sur le tas (j'ai le temps) ce qui n'est pas forcement le cas pour un jeune en école ou les bases sont primordiales pour aller vite.
Whismeril
Messages postés
14030
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
8 décembre 2019
322 -
Oui et non, je suis autodidacte aussi, j.au fait l’impasse sur les bases au début aussi, j’avais le temps aussi. Et un jour c’est mii qui était dans l’impasse, parce que certains concepts de base m’étaient totalement inconnus
Commenter la réponse de paulhochon
Messages postés
35
Date d'inscription
samedi 15 décembre 2018
Statut
Membre
Dernière intervention
15 janvier 2019
0
Merci
Oui mais c'est aussi à cela que sert un forum plein de membres performants étant prêts à aider les débutants comme moi ;)
Le partage de connaissances fait avancer plus vite et permet de ne pas réinventer la roue à chaque fois mais de partir au moins sur une bonne piste dès le début.
Merci à toutes ces personnes !
Commenter la réponse de paulhochon
Messages postés
14030
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
8 décembre 2019
322
0
Merci
Sauf qu'il m'a fallut reprendre mon projet de 0 pour le finaliser.
Franchement, prendre quelques jours (si t'es bon y'a pas besoin de plus longtemps) pour suivre un cours
Y'a celui de Plassere, très bien (à l'exception près selon moi qu'il prend l'objet pour une mode alors que c'est l'essence de .Net)
http://plasserre.developpez.com/cours/vb-net/

Ou celui d'openclassroom, bien plus objet mais moins accessible
Commenter la réponse de Whismeril
Messages postés
35
Date d'inscription
samedi 15 décembre 2018
Statut
Membre
Dernière intervention
15 janvier 2019
0
Merci
OK j'ai mis le cours de Plassere dans mes favoris ;)
Commenter la réponse de paulhochon