Tengo este código para recuperar imágenes de una bd access.
Sub RECUPERAR()
ImageList1 = New ImageList
ImageList1.ImageSize = New Size(100, 100)
ImageList1.ColorDepth = ColorDepth.Depth32Bit
LF.LargeImageList = ImageList1
LF.Items.Clear()
strSQL = "SELECT * FROM juegos"
Dim daEmp As New OleDbDataAdapter(strSQL, strConexion)
Dim dtEmp As New DataTable
daEmp.Fill(dtEmp)
For i = 0 To dtEmp.Rows.Count - 1
Dim img_buffer As Byte()
img_buffer = DirectCast(dtEmp.Rows(i)("imagen"), Byte())
Dim img_stream As New MemoryStream(img_buffer, True)
img_stream.Write(img_buffer, 0, img_buffer.Length)
ImageList1.Images.Add(dtEmp.Rows(i)("id").ToString(), New Bitmap(img_stream))
img_stream.Close()
Dim item As New ListViewItem(Strings.Left(dtEmp.Rows(i)("titulo").ToString, xTitulo))
item.SubItems.Add(dtEmp.Rows(i)("plataforma").ToString)
item.ImageKey = dtEmp.Rows(i)("id").ToString
LF.Items.Add(item)
Next i
End Sub
Pero me tira este error:
(http://www.mediafire.com/conv/7cbcd2446f77a5e8bf89322860a4d4bc4c45d13f3cc9d983e26ea96e721cdd7c4g.jpg) (http://www.mediafire.com/view/?lhps4m4fyo7o40x)
que raro, pero proba ponerle un valor fijo en ves de sacar el valor del campo id para ver que es lo que esta fallando, igualmente para recorrer el datatable se deberia hacer con un
For Each no con un
For, por ejemplo:
For Each row As DataRow In dtDataTable.Rows
strDetail = row("campo1")
Next row
saludos.
Hice asi y funciona no es el campo id el que esta fallando
imglist.Images.Add(dtEmp.Rows(i)("id").ToString(), Image.FromFile("c:\xxx\4zm.jpg"))
Este es el que falla
New Bitmap(img_stream)) alguna idea?
Ya pille cual es el error seba el ejemplo que me pasaste acá para guardar el contenido del picturebox sin tener el path:
Sub xSave()
'-------------------ESTE ES EL PROBLEMA-------------------------------------------------------
Dim xStream As New MemoryStream
PictureBox1.Image.Save(xStream, System.Drawing.Imaging.ImageFormat.Jpeg)
Dim breader As New BinaryReader(xStream)
Dim imgbuffer(xStream.Length) As Byte
breader.Read(imgbuffer, 0, xStream.Length)
xStream.Close()
'----------------------------------------------------------------------------------------------------
strSQL = "INSERT INTO juegos (titulo,imagen) VALUES (@titulo,@imagen)"
strComando.CommandText = strSQL
strComando.Connection = strConexion
strComando.Parameters.AddWithValue("@titulo", txtTitulo.Text)
strComando.Parameters.AddWithValue("@imagen", imgbuffer)
strComando.ExecuteNonQuery()
strComando.Dispose()
MsgBox("Saved")
End Sub
Creo que guarda mal el archivo y al querer abrir ahi se genera el error de este:
ImageList1.Images.Add(dtEmp.Rows(i)("id").ToString(), New Bitmap(img_stream))
Ahora si guardo de esta forma funciona de lujo.
Dim fsreader As New FileStream("c:\xxx\4zm.jpg", FileMode.Open, FileAccess.Read)
Dim breader As New BinaryReader(fsreader)
Dim imgbuffer(fsreader.Length) As Byte
breader.Read(imgbuffer, 0, fsreader.Length)
fsreader.Close()