Muy buenas Tardes maestros de la programacion, y muchas gracias de antemano soy novato, estoy desarrollando una aplicacion en vb.net de registros de personal para ello necesito capturar la imagen desde una webcam y guardarla en Base de Datos SQL Server para luego mediante una consulta visualizar la foto en un picturebox.
Para capturar la imagen desde una webcam esta funcionando bien, el problema es cuando quiero visualizar una imagen que se guardo en base de datos. "El parametro no es valido - Excepción del tipo 'System.ArgumentException' en System.Drawing.dll"
No se en donde esta el problema derrepente en la manera en que guardo en la base de datos o en la manera como lo visualizo. Ya he buscado en internet pero aparentemente esta bien lo que hago, pero por alguna razon me sale ese error.
el campo de mi BD es FOTO de tipo Image.
Por favor cualquier comentario es bienvenido.
Utilizo las siguientes funciones para guardar y cargar la imagen esta dentro de una clase:
Option Strict On
Imports Microsoft.VisualBasic
Imports System.Data
Imports System.IO
Imports System.Drawing
Public Class n_imagen
' Métodos compartidos
Public Shared Function Image2Bytes(ByVal img As Image) As Byte()
Dim sTemp As String = Path.GetTempFileName()
Dim fs As New FileStream(sTemp, FileMode.OpenOrCreate, FileAccess.ReadWrite)
img.Save(fs, System.Drawing.Imaging.ImageFormat.Png)
' Cerrarlo y volverlo a abrir
' o posicionarlo en el primer byte
'fs.Close()
'fs = New FileStream(sTemp, FileMode.Open, FileAccess.Read)
fs.Position = 0
'
Dim imgLength As Integer = CInt(fs.Length)
Dim bytes(0 To imgLength - 1) As Byte
fs.Read(bytes, 0, imgLength)
fs.Close()
Return bytes
End Function
Public Shared Function Bytes2Image(ByVal bytes() As Byte) As Image
If bytes Is Nothing Then Return Nothing
'
Dim ms As New MemoryStream(bytes)
Dim bm As Bitmap = Nothing
Try
bm = New Bitmap(ms)
Catch ex As Exception
System.Diagnostics.Debug.WriteLine(ex.Message)
End Try
Return bm
End Function
End Class
Para guardar en BD utilizo el siguiente codigo:
.Parameters.Add(New SqlParameter("@IMAGEN", SqlDbType.Image, ParameterDirection.Input)).Value = n_image.Image2Bytes(imgCapture.Image)
Y para visualizar utilizo el siguiente codigo en el form:
If dat_per.Rows(0).Item(27) IsNot DBNull.Value Then
Dim img As Image = n_image.Bytes2Image(CType(dat_per.Rows(0).Item(27) , Byte()))
If img IsNot Nothing Then
Me.imgVideo.Image = img
End If
End If