PICTUREBOX

cs_colby
Messages postés
127
Date d'inscription
mardi 10 mai 2005
Statut
Membre
Dernière intervention
2 août 2021
- Modifié le 14 mars 2018 à 14:47
cs_colby
Messages postés
127
Date d'inscription
mardi 10 mai 2005
Statut
Membre
Dernière intervention
2 août 2021
- 20 mars 2018 à 10:30
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

vb95
Messages postés
2630
Date d'inscription
samedi 11 janvier 2014
Statut
Modérateur
Dernière intervention
19 mai 2022
151
16 mars 2018 à 17:43
Bonjour
As-tu chargée la nouvelle image dans la PictureBox une fois l'image sélectionnée ?
0
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
0
vb95
Messages postés
2630
Date d'inscription
samedi 11 janvier 2014
Statut
Modérateur
Dernière intervention
19 mai 2022
151
17 mars 2018 à 15:28
bonjour
La Picturebox affiche-t-elle la nouvelle image chargée ?
A quelle ligne se produit l'erreur ?
0
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+
0
vb95
Messages postés
2630
Date d'inscription
samedi 11 janvier 2014
Statut
Modérateur
Dernière intervention
19 mai 2022
151
18 mars 2018 à 13:18
A quelle ligne se produit l'erreur ?
0
Me.PicureBx.Image.Save(MS, Me.PictureBx.Image.RawFormat)
0
vb95
Messages postés
2630
Date d'inscription
samedi 11 janvier 2014
Statut
Modérateur
Dernière intervention
19 mai 2022
151
18 mars 2018 à 22:59
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 !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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?
0
vb95
Messages postés
2630
Date d'inscription
samedi 11 janvier 2014
Statut
Modérateur
Dernière intervention
19 mai 2022
151
Modifié le 19 mars 2018 à 03:02
Alors là je n'en sais rien !
Désolé
0
Merci quand même pour l'écoute.
0
Whismeril
Messages postés
17339
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
24 mai 2022
596
19 mars 2018 à 08:17
Bonjour
Au départ comment as tu enregistré l’image dans la base?
0
cs_colby
Messages postés
127
Date d'inscription
mardi 10 mai 2005
Statut
Membre
Dernière intervention
2 août 2021

19 mars 2018 à 08:39
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
0
Whismeril
Messages postés
17339
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
24 mai 2022
596
19 mars 2018 à 09:41
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
0
cs_colby
Messages postés
127
Date d'inscription
mardi 10 mai 2005
Statut
Membre
Dernière intervention
2 août 2021

19 mars 2018 à 14:56
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

--
0
vb95
Messages postés
2630
Date d'inscription
samedi 11 janvier 2014
Statut
Modérateur
Dernière intervention
19 mai 2022
151
19 mars 2018 à 15:39
bonjour !
Cela fait 13 ans que tu es inscrit sur le site et il ne te vient pas à l'idée de poster le bout de code que tu utilises !
0
cs_colby
Messages postés
127
Date d'inscription
mardi 10 mai 2005
Statut
Membre
Dernière intervention
2 août 2021
> vb95
Messages postés
2630
Date d'inscription
samedi 11 janvier 2014
Statut
Modérateur
Dernière intervention
19 mai 2022

20 mars 2018 à 00:26
Veuillez m'excuser pour mon comportement. Surtout Whismerill.
Je reprends:
J'ai une form avec un picturebox et une base access
avec une colonne Img1 prenant comme donnée Objet OLE.

Pour charger l'image dans le picturebox j'ai fait :

 Private Sub Pic1_Click(sender As Object, e As EventArgs) Handles Pic1.Click
On Error Resume Next
Dim OpenFileDialog As New OpenFileDialog
OpenFileDialog.InitialDirectory = My.Computer.FileSystem.SpecialDirectories.MyPictures
OpenFileDialog.Filter = "All Files|*.*|Bitmaps|*.bmp|JPEGs|*.jpg"
If (OpenFileDialog.ShowDialog(Me) = System.Windows.Forms.DialogResult.OK) Then
Dim File As String
For Each File In OpenFileDialog.FileNames
Dim TestFile As System.IO.FileInfo = New System.IO.FileInfo(File)
If Not String.Compare(TestFile.Extension, ".bmp", True) = 0 _
And Not String.Compare(TestFile.Extension, ".jpg", True) = 0 Then
MessageBox.Show("Fichier non supporté. Sélectionner un fichier BMP ou JPG." & vbCrLf & _
" Essayer de nouveau.", "Auto")
Return
End If
With Me.Pic1
.Image = Image.FromFile(OpenFileDialog.FileName)
.SizeMode = PictureBoxSizeMode.StretchImage
.BorderStyle = BorderStyle.FixedSingle
End With
Next
End If
End Sub


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, Rown est un integer, Img1 la colonne image dans la table)


le problème :
Après affichage, je décide changer l'image du picturebox par une autre.
Alors j'ai fais:

Me.PictureBx.Image = Nothing


et après je sélectionne une nouvelle image, en cliquant dans le picturebox comme la permière fois. Après j'ai refait:

Dim MS As New IO.MemoryStream() 
Me.PicureBx.Image.Save(MS, Me.PictureBx.Image.RawFormat)
Dim ArrImage() As Byte = MS.GetBuffer
DTR("Img1") = ArrImage



Maintenant j'ai fait un update dans la base.

 Public Sub ValiderMiseAJour()
Try
Connection()
Sql = "SELECT ID, Cost, Img1 FROM Cars WHERE [ID] LIKE '" & Trim$(Me.TIndex.Text) & "'"
Cmd = New OleDb.OleDbCommand(Sql)
CrTA = New OleDb.OleDbDataAdapter(Cmd)
Cmd.Connection() = GP
CDSet = New DataSet
CrTA.Fill(CDSet, "Cars")
Dim Ligne As Integer = CDSet.Tables.Count - 1
With CDSet
DTR = CDSet.Tables("Cars").Rows(Ligne)

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

CmdB = New OleDb.OleDbCommandBuilder(CrTA) CrTA.UpdateCommand = CmdB.GetUpdateCommand
CrTA.Update(CDSet, "Cars") : CDSet.Clear()
MS1.Dispose()
MS1.Close()
End With
Catch ex As Exception
Finally
GP.Close()
End Try
End Sub


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+

a la ligne

Me.Pic1.Image.Save(MS1, Me.Pic1.Image.RawFormat)


du update

Merci d'avance
0
vb95
Messages postés
2630
Date d'inscription
samedi 11 janvier 2014
Statut
Modérateur
Dernière intervention
19 mai 2022
151 > cs_colby
Messages postés
127
Date d'inscription
mardi 10 mai 2005
Statut
Membre
Dernière intervention
2 août 2021

20 mars 2018 à 01:59
Et aussi
J'aurais aussi accepté tes excuses !
Mais je vois que je n'y a pas droit !
0
cs_colby
Messages postés
127
Date d'inscription
mardi 10 mai 2005
Statut
Membre
Dernière intervention
2 août 2021
> vb95
Messages postés
2630
Date d'inscription
samedi 11 janvier 2014
Statut
Modérateur
Dernière intervention
19 mai 2022

20 mars 2018 à 10:30
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.
0
Whismeril
Messages postés
17339
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
24 mai 2022
596
19 mars 2018 à 16:37
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 ....
0
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.
0