none
wpf guardar y mostrar imagen RRS feed

  • Pregunta

  • Hola amigos tengo el siguiente codigo en un boton WPF:

      Obj.leerdatos("select * from Internos where ID=" & Utilitarios.intID & "",
                  Sub(reader)
                      txtID.Text = reader(0).ToString
                      TextBox1.Text = reader(1).ToString
                      TextBox2.Text = reader(2).ToString
                      TextBox3.Text = reader(3).ToString
                      TextBox4.Text = reader(4).ToString
                      'PictureBox1.Image = DirectCast(reader(74), Byte())
                  End Sub)
            End If
            Utilitarios.intID = 0

    la cual llama a una clase cuyo codigo es el siguiente:

      Sub leerdatos(ByVal Sql As String, leerRegistro As Action(Of SqlDataReader), ParamArray parametros As SqlParameter())
            ':::Abrimos la conexion
            conectado()
            ':::Instruccion Try para capturar errores
            Try
                Using cmd = New SqlCommand(Sql, con)
                    cmd.Parameters.AddRange(parametros)
                    Using reader As SqlDataReader = cmd.ExecuteReader()
                        While (reader.Read())
                            leerRegistro(reader)
                        End While
                    End Using
                End Using
            Catch ex As Exception
                MsgBox("No se logro realizar la operación por: " & ex.Message, MsgBoxStyle.Critical, "SCEP-INPE")
            Finally
                desconectado()
            End Try
        End Sub

    pero no puedo visualizar las fotos que esta en una base sql server y no se como resolverlo, busco en internet y solo hay en codigo char que no se programar en ese tipo....porfavor ayudenme.

    viernes, 13 de julio de 2018 21:14

Todas las respuestas

  • Tienes un problema aquí:

    PictureBox1.Image = DirectCast(reader(74), Byte())

    Los datos de imagen en la base de datos son efectivamente de tipo array de bytes, Pero la propiedad Image requiere asignarle un objeto de tipo Image, no puedes asignarle los bytes. Por lo tanto, tienes que construir primero un Image a partir de los bytes y luego asignarle al picturebox ese Image. La forma de hacerlo no es muy evidente: El Image tiene un método que acepta un Stream. Hay que meter los bytes en algún tipo de Stream y luego pasárselos al Image.

    Dim losBytes as Byte() = DirectCast(reader(74), Byte())
    Dim ms as New MemoryStream(losBytes)
    Dim img as Image = Image.FromStream(ms)
    pictureBox1.Image = img

    sábado, 14 de julio de 2018 5:43
  • Amigo copie tu codigo y me aprece en la tercera fila con rojo

    Dim img as Image = Image.FromStream(ms)

    cuyo mensaje es fromstrean no pertenece a la coleccion

    martes, 17 de julio de 2018 0:00
  • Es esta función que está documentada aquí:

    https://msdn.microsoft.com/es-es/library/93z9ee4x(v=vs.110).aspx

    Como ves, es un método estático de la clase Image. Por el error que te da, parece ser que en tu programa tienes definida una colección que también se llama Image, y por eso el compilador se confunde. Prueba a desambiguar la sentencia escribiendo al completo la clase Image con su Namespace:

    Dim img as Image = System.Drawing.Image.FromStream(ms)

    martes, 17 de julio de 2018 6:22