none
¿cual seria la mejor manera de mostrar imagenes para seleccionar y guardar? RRS feed

  • Pregunta

  • cargo 6 imagenes en 6 buttons.backgroundimage, elijo alguna clickenado el boton con la imagen deseada, la paso a otro picturebox y estando ahi la debo guardar en bd sql.

    La imagen pasa exitosamente del Button.BackgroundImage al PictureBox. Luego intento guardarla en sql y no se guarda nada, aun cuando la imagen se ve perefectamente en el control PictureBox.

    Nota: El codigo de guardado a sql desde Picturebox funciona perfecto si cargo la imagen  desde disco (Image.FromFile), pero no guarda nada si cargo la imagen en el picturebox desde button.backgroundimage...

    me marca este error: Error generico GD1+ , en la linea: img.Save(mStream, ImageFormat.Jpeg)

    ¿Porque?

    ¿Hay alguna forma  mas practica de 1)Visualizar las 6 imagenes 2) Desplegar la seleccionada en un picturebox 3) Finalmente guardar la seleccionada de ese picturebox?



    Luis C



    sábado, 6 de marzo de 2021 0:46

Respuestas

  • Hola:
    Prueba con esto

            Try
                Dim Imagen As Object = gF_ImagenToByteArray(PictureBox1.Image)
                Dim lsQuery As String = "UPDATE TU_TABLA SET imagen=@imagen WHERE ID=@ID"
                Using lConexion As New SqlConnection(TU_CADENA_DE_CONEXION)
                    lConexion.Open()
                    Using lComando As New SqlCommand(lsQuery, lConexion)
                        lComando.Parameters.Add(New SqlParameter("@imagen", SqlDbType.VarBinary))
                        lComando.Parameters("@imagen").Value = Imagen
                        lComando.Parameters.Add(New SqlParameter("@ID", TU_VALOR_DE_ID))
                        lComando.ExecuteNonQuery()
                    End Using
                End Using
            Catch ex As Exception
                MessageBox.Show(ex.Message, , MessageBoxButtons.OK, MessageBoxIcon.Error)
            End Try

        Private Function gF_ImagenToByteArray(ByVal Imagen As System.Drawing.Image) As Byte()
            ' crear un objeto stream en memoria conteniendo los datos de la imagen
            Dim oMemoryStream As New MemoryStream()
            Imagen.Save(oMemoryStream, System.Drawing.Imaging.ImageFormat.Jpeg)
            Return oMemoryStream.ToArray()
        End Function


    Un saludo desde Bilbo
    Carlos
    • Marcado como respuesta Luis Carlos H sábado, 6 de marzo de 2021 15:56
    sábado, 6 de marzo de 2021 8:20

Todas las respuestas

  • Deleted
    sábado, 6 de marzo de 2021 0:57
  •  Public Sub store_pic_Sql(ByVal img As Image, strField As String, ID As Int32)
            Try

                Dim conn As SqlConnection = New SqlConnection()
                conn.ConnectionString = GlobalVariables.cString


                Dim sql As String = "UPDATE TBLCUSTIDS SET " & strField & "= @imgData WHERE ID=" & ID
                Dim command1 As SqlCommand = New SqlCommand(sql, conn)
                Dim sqlpara As New SqlParameter("@imgData", SqlDbType.Image)

                Dim mStream As MemoryStream = New MemoryStream()
                img.Save(mStream, ImageFormat.Jpeg)
                sqlpara.SqlValue = mStream.GetBuffer

                command1.Parameters.Add(sqlpara)
                conn.Open()
                command1.ExecuteNonQuery()
                conn.Close()
            Catch ex As Exception

            End Try
        End Sub

    El valor de la imagen para esta funcion lo envio asi (cuando la imagen ya esta cargada):  dim img as image=picturebox1.image

    Reitero: Lo guarda perfecto si la imagen del picturebox viene de disco: Picturebox1.image=image.fromfile("c:\path...")

    Pero no funciona si lo obtengo asi: Picturebox1.image=button1.backgroundimage

    en este ultimo caso no se guarda nada, me marca este error: Error generico GD1+

    en la linea: img.Save(mStream, ImageFormat.Jpeg)



    Luis C









    sábado, 6 de marzo de 2021 1:03
  • Deleted
    sábado, 6 de marzo de 2021 1:15
  • Hola:
    Prueba con esto

            Try
                Dim Imagen As Object = gF_ImagenToByteArray(PictureBox1.Image)
                Dim lsQuery As String = "UPDATE TU_TABLA SET imagen=@imagen WHERE ID=@ID"
                Using lConexion As New SqlConnection(TU_CADENA_DE_CONEXION)
                    lConexion.Open()
                    Using lComando As New SqlCommand(lsQuery, lConexion)
                        lComando.Parameters.Add(New SqlParameter("@imagen", SqlDbType.VarBinary))
                        lComando.Parameters("@imagen").Value = Imagen
                        lComando.Parameters.Add(New SqlParameter("@ID", TU_VALOR_DE_ID))
                        lComando.ExecuteNonQuery()
                    End Using
                End Using
            Catch ex As Exception
                MessageBox.Show(ex.Message, , MessageBoxButtons.OK, MessageBoxIcon.Error)
            End Try

        Private Function gF_ImagenToByteArray(ByVal Imagen As System.Drawing.Image) As Byte()
            ' crear un objeto stream en memoria conteniendo los datos de la imagen
            Dim oMemoryStream As New MemoryStream()
            Imagen.Save(oMemoryStream, System.Drawing.Imaging.ImageFormat.Jpeg)
            Return oMemoryStream.ToArray()
        End Function


    Un saludo desde Bilbo
    Carlos
    • Marcado como respuesta Luis Carlos H sábado, 6 de marzo de 2021 15:56
    sábado, 6 de marzo de 2021 8:20
  • Hola Luis Carlos,

    Gracias por confirmar que se ha encontrado una solución a la consulta realizada.

    Gracias por usar los foros de MSDN.

    Eric Ruiz

    ____________________________

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.

    Si tiene algún cumplido o reclamo sobre el soporte de MSDN siéntase en la libertad de contactar MSDNFSF@microsoft.com.

    lunes, 8 de marzo de 2021 14:56
    Moderador