Recuperar imagen de BD cargar en Imagelist y mostrar en ListView

Iniciado por enterariel, 10 Agosto 2012, 22:02 PM

0 Miembros y 1 Visitante están viendo este tema.

enterariel

Tengo este código para recuperar imágenes de una bd access.

Código (vbnet) [Seleccionar]
    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:


seba123neo

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:

Código (vbnet) [Seleccionar]
For Each row As DataRow In dtDataTable.Rows
    strDetail = row("campo1")
Next row


saludos.



La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson

enterariel

Hice asi y funciona no es el campo id el que esta fallando
Código (vbnet) [Seleccionar]
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?

enterariel

Ya pille cual es el error seba el ejemplo que me pasaste acá para guardar el contenido del picturebox sin tener el path:

Código (vbnet) [Seleccionar]
    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:
Código (vbnet) [Seleccionar]
ImageList1.Images.Add(dtEmp.Rows(i)("id").ToString(), New Bitmap(img_stream))

Ahora si guardo de esta forma funciona de lujo.

Código (vbnet) [Seleccionar]
        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()