PICTUREBOX

Signaler
Messages postés
124
Date d'inscription
mardi 10 mai 2005
Statut
Membre
Dernière intervention
29 mai 2020
-
Messages postés
124
Date d'inscription
mardi 10 mai 2005
Statut
Membre
Dernière intervention
29 mai 2020
-
Bonsoir et soyez indulgent à l'égard des débutants.
J'ai une form avec un picturebox et une base access
avec une colonne Img1 prenant comme donnée Objet OLE.

Pour enregistrer l'image, j'ai fait:
Dim MS As New IO.MemoryStream() 
Me.PicureBx.Image.Save(MS, Me.PictureBx.Image.RawFormat)
Dim ArrImage() As Byte = MS.GetBuffer 
DTR("Img1") = ArrImage
'(DTR est le DataRow)

Pour afficher l'image enregistrée j'ai fait:

Dim arrPicture() As Byte = CType(CrT.Rows(RowN).Item("Img1"), Byte())
Dim MS As New MemoryStream(ArrPicture)
   With Me.PictureBx
      .Image = Image.FromStream(MS)
      .SizeMode = PictureBoxSizeMode.StretchImage
      .BorderStyle = BorderStyle.FixedSingle
   End With
MS.Close()
'(Ici Crt est le DataTable et Rown est un integer)

Jusque là cela se comporte bien.

le problème :
Après affichage, je décide de modifier un enregistrement en remplaçant
l'ancienne image afficheée lors de l'appel par une autre image.
Alors j'ai fais:
Me.PictureBx.Image = Nothing

et après avoir sélectionné une nouvelle image, j'ai fait:
Dim MS As New IO.MemoryStream() 
Me.PicureBx.Image.Save(MS, Me.PictureBx.Image.RawFormat)
Dim ArrImage() As Byte = MS.GetBuffer 
DTR("Img1") = ArrImage

La nouvelle image séléctionnée ne s'enregistre pas, et j'obtient comme résultat :

Une exception non gérée du type
'System.Runtime.InteropServices.ExternalException' s'est produite dans
System.Drawing.dll

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

--

9 réponses

Messages postés
2235
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
15 septembre 2020
113
Bonjour
As-tu chargée la nouvelle image dans la PictureBox une fois l'image sélectionnée ?
Oui, c'est quand je remplace la première image chargée dans le picturebox par une autre et voudrais enregistré la nouvelle image que je reçois l'erreur. Merci
Messages postés
2235
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
15 septembre 2020
113
bonjour
La Picturebox affiche-t-elle la nouvelle image chargée ?
A quelle ligne se produit l'erreur ?
Oui, la nouvelle image est correctement chargée. C'est lors de l'enregistrement de l'image dans la base que je reçois comme erreur:
Une exception non g?r?e du type
'System.Runtime.InteropServices.ExternalException' s'est produite dans
System.Drawing.dll

Informations compl?mentaires : Une erreur g?n?rique s'est produite dans GDI+
Messages postés
2235
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
15 septembre 2020
113
A quelle ligne se produit l'erreur ?
Me.PicureBx.Image.Save(MS, Me.PictureBx.Image.RawFormat)
Messages postés
2235
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
15 septembre 2020
113
bizarre !
Tu arrives à enregistrer l'image à l'origine !
Tu la modifiés dans la Picturebox et avec le même code elle ne s'enregistre pas !
Oui, et a chaque fois a la ligne ou l'image est sauvée au format Raw, une exception est levée.
J'ai essayé de supprimer la ligue complète dans la base et de procéder a l'enregistrement d'une nouvelle ligne, idem.
Comment faire?
Messages postés
2235
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
15 septembre 2020
113
Alors là je n'en sais rien !
Désolé
Merci quand même pour l'écoute.
Messages postés
14767
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
20 septembre 2020
433
Bonjour
Au départ comment as tu enregistré l’image dans la base?
Messages postés
124
Date d'inscription
mardi 10 mai 2005
Statut
Membre
Dernière intervention
29 mai 2020

Type byte, après qu'il soit sauvé au format raw.
Dim MS As New IO.MemoryStream()
Me.PicureBx.Image.Save(MS, Me.PictureBx.Image.RawFormat)
Dim ArrImage() As Byte = MS.GetBuffer
DTR("Img1") = ArrImage
Messages postés
14767
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
20 septembre 2020
433
Ok, donc dans les 2 cas tu utilises bien le même code.
Et comment tu modifies l’image?

Ps utilise la coloration syntaxique quand tu postes un code
http://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code
Messages postés
124
Date d'inscription
mardi 10 mai 2005
Statut
Membre
Dernière intervention
29 mai 2020

A l'aide d'un bout de code trouvé sur vbfrance. Je clic sur le picturebox qui me conduit a mes images j'en choisi une et elle s'affiche. Jai limité le choix a .jpg et a .bmp

--
Messages postés
2235
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
15 septembre 2020
113 >
Messages postés
124
Date d'inscription
mardi 10 mai 2005
Statut
Membre
Dernière intervention
29 mai 2020

Et aussi
J'aurais aussi accepté tes excuses !
Mais je vois que je n'y a pas droit !
Messages postés
124
Date d'inscription
mardi 10 mai 2005
Statut
Membre
Dernière intervention
29 mai 2020
>
Messages postés
2235
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
15 septembre 2020

Bonjour, les premières excuses sont pour vous tous toi y compris.
pour Wismerill; c'est juste que je viens de retrouver un ancien coach lorsque j'ai débuté. soit pas vexé, tu compte pour moi, vu le mal que tu t'es donné pour me répondre, merci infiniment.
Messages postés
14767
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
20 septembre 2020
433
A l'aide d'un bout de code trouvé sur vbfrance

Je rejoins vb95, s’il n’y avait que 10 codes sur le site, un jour ou je suis motivé, je tacherai peut-être de trouver par moi-même, mais y’en a des millers ....
Messages postés
2235
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
15 septembre 2020
113
Salut

Tu écris : "Maintenant j'ai fait un update dans la base."

Dans la Sub ValiderMiseAJour()
                Dim MS1 As New IO.MemoryStream() 
                Me.Pic1.Image.Save(MS1, Me.Pic1.Image.RawFormat)
                Dim ArrImage1() As Byte = MS1.GetBuffer 
                DTR("Img1") = ArrImage1


Pourquoi Me.Pict1 et nom Me.PicureBx ?

A part cela
1 ) Mélange de VB 6 et de VB Net :
On Error Resume Next
c'est du VB 6 ! Surtout que tu utilises
Try Catch
ailleurs qui gère les erreurs en VB Net
2)
Not String.Compare(TestFile.Extension, ".bmp", True) = 0 
: il y a une méthode plus VB Net pour avoir l'extension
System.Io.Path.GetExtension(fileName)

3) Supprimer dans les références du projet la référence Microsoft.visualBasic : ceci évite de mélanger du VB 6 avec du VB Net
4) Dans l'onglet Compiler mettre Option Strict et Option Explicit sur True : ceci oblige de déclarer toutes les variables et d'éviter les erreurs de type de variable

5) et pour finir : un bon cours sur VB Net : http://plasserre.developpez.com/cours/vb-net/
Messages postés
14767
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
20 septembre 2020
433
Bonjour, merci d’avoir essayé d’utliser la coloration syntaxique.
Cependant, il n’y a que des pavés gris, c’est parce que tu n’as pas spécifié que tu voulais de la couleur pour basic.
C’est pourtant décrit dans la petite procédure que je t’ai mis en lien.

En plus des remarques judicieuses de Vb95 sur le mélange vb6 / vb.net (il y a d’autres exemples dans le code), je pense qu’il a peut être mis le doigt sur le problème, une fois tu enregistres ce que contient PictureBx et une autre fois Pict1. Y’a t il bien une image dans Pict1?
Mes excuses svp, je discute avec vous depuis mon mobile. Je tacherai de ne plus répondre si je ne suis pas devant mon ordi. Une fois encore mes excuses. Suis toujours débutant puisque je codes par plaisir et pour aider de temps en temps.