SALVAR IMAGEM CAPTURADA PELA WEB CAM NO BANCO
tenho esse codigo que tira foto pela web cam pega a foto e manda para uma pictureBox no cadastro de clientes, como faço para salvar essa imagem no banco de dados
Public Class frmCapturaImagem
Const WM_CAP As Short = &H400S
Const WM_CAP_DRIVER_CONNECT As Integer = WM_CAP + 10
Const WM_CAP_DRIVER_DISCONNECT As Integer = WM_CAP + 11
Const WM_CAP_EDIT_COPY As Integer = WM_CAP + 30
Const WM_CAP_SET_PREVIEW As Integer = WM_CAP + 50
Const WM_CAP_SET_PREVIEWRATE As Integer = WM_CAP + 52
Const WM_CAP_SET_SCALE As Integer = WM_CAP + 53
Const WS_CHILD As Integer = &H40000000
Const WS_VISIBLE As Integer = &H10000000
Const SWP_NOMOVE As Short = &H2S
Const SWP_NOSIZE As Short = 1
Const SWP_NOZORDER As Short = &H4S
Const HWND_BOTTOM As Short = 1
Dim iDevice As Integer = 0 [ô] ID do dispositivo atual
Dim hHwnd As Integer [ô] manipulador da janela do visualizador
Declare Function SendMessage Lib [Ô]user32[Ô] Alias [Ô]SendMessageA[Ô] _
(ByVal hwnd As Integer, ByVal wMsg As Integer, ByVal wParam As Integer, <MarshalAs(UnmanagedType.AsAny)> ByVal lParam As Object) As Integer
Declare Function SetWindowPos Lib [Ô]user32[Ô] Alias [Ô]SetWindowPos[Ô] (ByVal hwnd As Integer, _
ByVal hWndInsertAfter As Integer, ByVal x As Integer, ByVal y As Integer, ByVal cx As Integer, ByVal cy As Integer, ByVal wFlags As Integer) As Integer
[ô]A função DestroyWindow destroi a janela especificada.
[ô]Envia as mensagens WM_DESTROY e WM_NCDESTROY para a
[ô]janela para destivá-la e remove o foco do teclado da mesma
[ô]Library - User32
[ô]Parametros - hWnd - (identica a janela a ser destruida)
[ô]Retorna um valor diferente de zero se for executada com sucesso, [ô]caso contrario retorna zero
Declare Function DestroyWindow Lib [Ô]user32[Ô] (ByVal hndw As Integer) As Boolean
Declare Function capCreateCaptureWindowA Lib [Ô]avicap32.dll[Ô] (ByVal lpszWindowName As String, ByVal dwStyle As Integer, _
ByVal x As Integer, ByVal y As Integer, ByVal nWidth As Integer, ByVal nHeight As Short, ByVal hWndParent As Integer, ByVal nID As Integer) As Integer
Declare Function capGetDriverDescriptionA Lib [Ô]avicap32.dll[Ô] (ByVal wDriver As Short, _
ByVal lpszName As String, ByVal cbName As Integer, ByVal lpszVer As String, ByVal cbVer As Integer) As Boolean
Private Sub carregaDispositivos()
Dim strNome As String = Space(100)
Dim strVer As String = Space(100)
Dim bRetorna As Boolean
Dim x As Integer = 0
[ô][ô] Carrega os dispositivos em lstDevices
Do
[ô] Obtem o nome e a versão Driver
bRetorna = capGetDriverDescriptionA(x, strNome, 100, strVer, 100)
[ô] se existir um dispositivo inclui o nome da lista
If bRetorna Then lstDispositivos.Items.Add(strNome.Trim)
x += 1
Loop Until bRetorna = False
End Sub
Private Sub frmCapturaImagem_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
carregaDispositivos()
If lstDispositivos.Items.Count > 0 Then
btnIniciar.Enabled = True
lstDispositivos.SelectedIndex = 0
btnIniciar.Enabled = True
Else
lstDispositivos.Items.Add([Ô]Não dispositivo de captura instalado.[Ô])
btnIniciar.Enabled = False
End If
btnParar.Enabled = False
btnSalvar.Enabled = False
picCaptura.SizeMode = PictureBoxSizeMode.StretchImage
End Sub
Private Sub abreJanelaVisualizacao()
Dim iHeight As Integer = picCaptura.Height
Dim iWidth As Integer = picCaptura.Width
[ô] Abre a janela de visualização no picturebox
hHwnd = capCreateCaptureWindowA(iDevice, WS_VISIBLE Or WS_CHILD, 0, 0, 640, _
480, picCaptura.Handle.ToInt32, 0)
[ô] Conecta com o drive
If SendMessage(hHwnd, WM_CAP_DRIVER_CONNECT, iDevice, 0) Then
[ô]
[ô]Define a escala de previsão
SendMessage(hHwnd, WM_CAP_SET_SCALE, True, 0)
[ô]Define a taxa de visualização em milisegundos
SendMessage(hHwnd, WM_CAP_SET_PREVIEWRATE, 66, 0)
[ô]Iniciar a visualização da imagem a partir da camara
SendMessage(hHwnd, WM_CAP_SET_PREVIEW, True, 0)
[ô] Redimensiona a janela para se ajustar no picturebox
SetWindowPos(hHwnd, HWND_BOTTOM, 0, 0, picCaptura.Width, picCaptura.Height, SWP_NOMOVE Or SWP_NOZORDER)
btnSalvar.Enabled = True
btnParar.Enabled = True
btnIniciar.Enabled = False
Else
[ô]
[ô] Erro de conexão fecha a janela de dispostivos
DestroyWindow(hHwnd)
btnSalvar.Enabled = False
End If
End Sub
Private Sub btnIniciar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnIniciar.Click
iDevice = lstDispositivos.SelectedIndex
abreJanelaVisualizacao()
End Sub
Private Sub fechaJanelaVisualizacao()
[ô] Desconecta do dispositivo
SendMessage(hHwnd, WM_CAP_DRIVER_DISCONNECT, iDevice, 0)
[ô] fecha a chama a janela
DestroyWindow(hHwnd)
End Sub
Private Sub btnParar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnParar.Click
fechaJanelaVisualizacao()
btnSalvar.Enabled = False
btnIniciar.Enabled = True
btnParar.Enabled = False
End Sub
Private Sub btnSalvar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSalvar.Click
Dim dados As IDataObject
Dim bmap As Image
[ô] Copia a imagem para o clipboard
SendMessage(hHwnd, WM_CAP_EDIT_COPY, 0, 0)
[ô] Obtem a imagem do clipboard e converte para bitmap
dados = Clipboard.GetDataObject()
If dados.GetDataPresent(GetType(System.Drawing.Bitmap)) Then
bmap = CType(dados.GetData(GetType(System.Drawing.Bitmap)), Image)
picCaptura.Image = bmap
[ô]pega a imagem capturada pela web cam e joga na pictureBox no formulario de cadastro de usuario
frmNovoCliente.PictureBox1.Image = picCaptura.Image
fechaJanelaVisualizacao()
Me.Close()
btnSalvar.Enabled = False
btnParar.Enabled = False
btnIniciar.Enabled = True
End If
End Sub
Private Sub Form1_Closing(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing
If btnParar.Enabled Then
fechaJanelaVisualizacao()
End If
End Sub
End Class
Public Class frmCapturaImagem
Const WM_CAP As Short = &H400S
Const WM_CAP_DRIVER_CONNECT As Integer = WM_CAP + 10
Const WM_CAP_DRIVER_DISCONNECT As Integer = WM_CAP + 11
Const WM_CAP_EDIT_COPY As Integer = WM_CAP + 30
Const WM_CAP_SET_PREVIEW As Integer = WM_CAP + 50
Const WM_CAP_SET_PREVIEWRATE As Integer = WM_CAP + 52
Const WM_CAP_SET_SCALE As Integer = WM_CAP + 53
Const WS_CHILD As Integer = &H40000000
Const WS_VISIBLE As Integer = &H10000000
Const SWP_NOMOVE As Short = &H2S
Const SWP_NOSIZE As Short = 1
Const SWP_NOZORDER As Short = &H4S
Const HWND_BOTTOM As Short = 1
Dim iDevice As Integer = 0 [ô] ID do dispositivo atual
Dim hHwnd As Integer [ô] manipulador da janela do visualizador
Declare Function SendMessage Lib [Ô]user32[Ô] Alias [Ô]SendMessageA[Ô] _
(ByVal hwnd As Integer, ByVal wMsg As Integer, ByVal wParam As Integer, <MarshalAs(UnmanagedType.AsAny)> ByVal lParam As Object) As Integer
Declare Function SetWindowPos Lib [Ô]user32[Ô] Alias [Ô]SetWindowPos[Ô] (ByVal hwnd As Integer, _
ByVal hWndInsertAfter As Integer, ByVal x As Integer, ByVal y As Integer, ByVal cx As Integer, ByVal cy As Integer, ByVal wFlags As Integer) As Integer
[ô]A função DestroyWindow destroi a janela especificada.
[ô]Envia as mensagens WM_DESTROY e WM_NCDESTROY para a
[ô]janela para destivá-la e remove o foco do teclado da mesma
[ô]Library - User32
[ô]Parametros - hWnd - (identica a janela a ser destruida)
[ô]Retorna um valor diferente de zero se for executada com sucesso, [ô]caso contrario retorna zero
Declare Function DestroyWindow Lib [Ô]user32[Ô] (ByVal hndw As Integer) As Boolean
Declare Function capCreateCaptureWindowA Lib [Ô]avicap32.dll[Ô] (ByVal lpszWindowName As String, ByVal dwStyle As Integer, _
ByVal x As Integer, ByVal y As Integer, ByVal nWidth As Integer, ByVal nHeight As Short, ByVal hWndParent As Integer, ByVal nID As Integer) As Integer
Declare Function capGetDriverDescriptionA Lib [Ô]avicap32.dll[Ô] (ByVal wDriver As Short, _
ByVal lpszName As String, ByVal cbName As Integer, ByVal lpszVer As String, ByVal cbVer As Integer) As Boolean
Private Sub carregaDispositivos()
Dim strNome As String = Space(100)
Dim strVer As String = Space(100)
Dim bRetorna As Boolean
Dim x As Integer = 0
[ô][ô] Carrega os dispositivos em lstDevices
Do
[ô] Obtem o nome e a versão Driver
bRetorna = capGetDriverDescriptionA(x, strNome, 100, strVer, 100)
[ô] se existir um dispositivo inclui o nome da lista
If bRetorna Then lstDispositivos.Items.Add(strNome.Trim)
x += 1
Loop Until bRetorna = False
End Sub
Private Sub frmCapturaImagem_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
carregaDispositivos()
If lstDispositivos.Items.Count > 0 Then
btnIniciar.Enabled = True
lstDispositivos.SelectedIndex = 0
btnIniciar.Enabled = True
Else
lstDispositivos.Items.Add([Ô]Não dispositivo de captura instalado.[Ô])
btnIniciar.Enabled = False
End If
btnParar.Enabled = False
btnSalvar.Enabled = False
picCaptura.SizeMode = PictureBoxSizeMode.StretchImage
End Sub
Private Sub abreJanelaVisualizacao()
Dim iHeight As Integer = picCaptura.Height
Dim iWidth As Integer = picCaptura.Width
[ô] Abre a janela de visualização no picturebox
hHwnd = capCreateCaptureWindowA(iDevice, WS_VISIBLE Or WS_CHILD, 0, 0, 640, _
480, picCaptura.Handle.ToInt32, 0)
[ô] Conecta com o drive
If SendMessage(hHwnd, WM_CAP_DRIVER_CONNECT, iDevice, 0) Then
[ô]
[ô]Define a escala de previsão
SendMessage(hHwnd, WM_CAP_SET_SCALE, True, 0)
[ô]Define a taxa de visualização em milisegundos
SendMessage(hHwnd, WM_CAP_SET_PREVIEWRATE, 66, 0)
[ô]Iniciar a visualização da imagem a partir da camara
SendMessage(hHwnd, WM_CAP_SET_PREVIEW, True, 0)
[ô] Redimensiona a janela para se ajustar no picturebox
SetWindowPos(hHwnd, HWND_BOTTOM, 0, 0, picCaptura.Width, picCaptura.Height, SWP_NOMOVE Or SWP_NOZORDER)
btnSalvar.Enabled = True
btnParar.Enabled = True
btnIniciar.Enabled = False
Else
[ô]
[ô] Erro de conexão fecha a janela de dispostivos
DestroyWindow(hHwnd)
btnSalvar.Enabled = False
End If
End Sub
Private Sub btnIniciar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnIniciar.Click
iDevice = lstDispositivos.SelectedIndex
abreJanelaVisualizacao()
End Sub
Private Sub fechaJanelaVisualizacao()
[ô] Desconecta do dispositivo
SendMessage(hHwnd, WM_CAP_DRIVER_DISCONNECT, iDevice, 0)
[ô] fecha a chama a janela
DestroyWindow(hHwnd)
End Sub
Private Sub btnParar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnParar.Click
fechaJanelaVisualizacao()
btnSalvar.Enabled = False
btnIniciar.Enabled = True
btnParar.Enabled = False
End Sub
Private Sub btnSalvar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSalvar.Click
Dim dados As IDataObject
Dim bmap As Image
[ô] Copia a imagem para o clipboard
SendMessage(hHwnd, WM_CAP_EDIT_COPY, 0, 0)
[ô] Obtem a imagem do clipboard e converte para bitmap
dados = Clipboard.GetDataObject()
If dados.GetDataPresent(GetType(System.Drawing.Bitmap)) Then
bmap = CType(dados.GetData(GetType(System.Drawing.Bitmap)), Image)
picCaptura.Image = bmap
[ô]pega a imagem capturada pela web cam e joga na pictureBox no formulario de cadastro de usuario
frmNovoCliente.PictureBox1.Image = picCaptura.Image
fechaJanelaVisualizacao()
Me.Close()
btnSalvar.Enabled = False
btnParar.Enabled = False
btnIniciar.Enabled = True
End If
End Sub
Private Sub Form1_Closing(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing
If btnParar.Enabled Then
fechaJanelaVisualizacao()
End If
End Sub
End Class
voce ja passou aqui..?
http://www.macoratti.net/vbna_cp2.htm
la tem um exemplo que salva em access
http://www.macoratti.net/vbna_cp2.htm
la tem um exemplo que salva em access
Por que nao salvar o caminho da foto?
Bom esse assunto já foi abordado algumas vezes aqui no fórum, quando eu preciso trabalhar com imagem eu geralmente costumo salvar o [Ô]caminho[Ô] como dito pelo KURTGU, mas porque ?
Quando você salva uma imagem no banco, formato BLOB se não me engano ao passar do tempo seu banco ficará gigantesco, devido ao tamanho das imagens e pode dar problemas para recuperar as imagens etc.
A minha sugestão é salve a localização da foto por exemplo ao efetivar o cadastro do usuário você salva a imagem em um diretório FOTOS ao carregar os dados do cliente você simplesmente dá um load na imagem e verifique se ela realmente existe no diretório.
OBS:Não testei seu código fonte.
Quando você salva uma imagem no banco, formato BLOB se não me engano ao passar do tempo seu banco ficará gigantesco, devido ao tamanho das imagens e pode dar problemas para recuperar as imagens etc.
A minha sugestão é salve a localização da foto por exemplo ao efetivar o cadastro do usuário você salva a imagem em um diretório FOTOS ao carregar os dados do cliente você simplesmente dá um load na imagem e verifique se ela realmente existe no diretório.
OBS:Não testei seu código fonte.
Como o amigo acima disse, não é nada viável salvar imagens no banco.
Uma solução que eu sempre proponho, salve o caminho no seu banco, e na busca dos dados trate o erro caso o caminho não seja encontrado.
Simples, fácil e viável.
Uma solução que eu sempre proponho, salve o caminho no seu banco, e na busca dos dados trate o erro caso o caminho não seja encontrado.
Simples, fácil e viável.
Tópico encerrado , respostas não são mais permitidas