Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: enterariel en 10 Agosto 2012, 22:02 pm



Título: Recuperar imagen de BD cargar en Imagelist y mostrar en ListView
Publicado por: enterariel en 10 Agosto 2012, 22:02 pm
Tengo este código para recuperar imágenes de una bd access.

Código
  1.    Sub RECUPERAR()
  2.        ImageList1 = New ImageList
  3.        ImageList1.ImageSize = New Size(100, 100)
  4.        ImageList1.ColorDepth = ColorDepth.Depth32Bit
  5.  
  6.        LF.LargeImageList = ImageList1
  7.        LF.Items.Clear()
  8.  
  9.        strSQL = "SELECT * FROM juegos"
  10.        Dim daEmp As New OleDbDataAdapter(strSQL, strConexion)
  11.        Dim dtEmp As New DataTable
  12.        daEmp.Fill(dtEmp)
  13.  
  14.        For i = 0 To dtEmp.Rows.Count - 1
  15.  
  16.            Dim img_buffer As Byte()
  17.            img_buffer = DirectCast(dtEmp.Rows(i)("imagen"), Byte())
  18.            Dim img_stream As New MemoryStream(img_buffer, True)
  19.  
  20.            img_stream.Write(img_buffer, 0, img_buffer.Length)
  21.            ImageList1.Images.Add(dtEmp.Rows(i)("id").ToString(), New Bitmap(img_stream))
  22.            img_stream.Close()
  23.  
  24.            Dim item As New ListViewItem(Strings.Left(dtEmp.Rows(i)("titulo").ToString, xTitulo))
  25.            item.SubItems.Add(dtEmp.Rows(i)("plataforma").ToString)
  26.  
  27.            item.ImageKey = dtEmp.Rows(i)("id").ToString
  28.            LF.Items.Add(item)
  29.        Next i
  30.  
  31.    End Sub

Pero me tira este error:

(http://www.mediafire.com/conv/7cbcd2446f77a5e8bf89322860a4d4bc4c45d13f3cc9d983e26ea96e721cdd7c4g.jpg) (http://www.mediafire.com/view/?lhps4m4fyo7o40x)


Título: Re: Recuperar imagen de BD cargar en Imagelist y mostrar en ListView
Publicado por: seba123neo en 11 Agosto 2012, 00:30 am
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
  1. For Each row As DataRow In dtDataTable.Rows
  2.    strDetail = row("campo1")
  3. Next row

saludos.





Título: Re: Recuperar imagen de BD cargar en Imagelist y mostrar en ListView
Publicado por: enterariel en 11 Agosto 2012, 02:42 am
Hice asi y funciona no es el campo id el que esta fallando
Código
  1. 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?


Título: Re: Recuperar imagen de BD cargar en Imagelist y mostrar en ListView
Publicado por: enterariel en 11 Agosto 2012, 03:40 am
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
  1.    Sub xSave()
  2.  
  3.        '-------------------ESTE ES EL PROBLEMA-------------------------------------------------------
  4.        Dim xStream As New MemoryStream
  5.        PictureBox1.Image.Save(xStream, System.Drawing.Imaging.ImageFormat.Jpeg)
  6.        Dim breader As New BinaryReader(xStream)
  7.        Dim imgbuffer(xStream.Length) As Byte
  8.        breader.Read(imgbuffer, 0, xStream.Length)
  9.        xStream.Close()
  10.        '----------------------------------------------------------------------------------------------------
  11.  
  12.        strSQL = "INSERT INTO juegos (titulo,imagen) VALUES (@titulo,@imagen)"
  13.        strComando.CommandText = strSQL
  14.        strComando.Connection = strConexion
  15.  
  16.        strComando.Parameters.AddWithValue("@titulo", txtTitulo.Text)
  17.        strComando.Parameters.AddWithValue("@imagen", imgbuffer)
  18.        strComando.ExecuteNonQuery()
  19.        strComando.Dispose()
  20.        MsgBox("Saved")
  21.  
  22.    End Sub

Creo que guarda mal el archivo y al querer abrir ahi se genera el error de este:
Código
  1. ImageList1.Images.Add(dtEmp.Rows(i)("id").ToString(), New Bitmap(img_stream))

Ahora si guardo de esta forma funciona de lujo.

Código
  1.        Dim fsreader As New FileStream("c:\xxx\4zm.jpg", FileMode.Open, FileAccess.Read)
  2.        Dim breader As New BinaryReader(fsreader)
  3.        Dim imgbuffer(fsreader.Length) As Byte
  4.        breader.Read(imgbuffer, 0, fsreader.Length)
  5.        fsreader.Close()
  6.