SALVAR IMAGEM CAPTURADA PELA WEB CAM NO BANCO

AUGUSTOMFI 30/09/2012 13:26:17
#410877
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
ROBSON220BASS 10/10/2012 18:09:00
#411768
voce ja passou aqui..?

http://www.macoratti.net/vbna_cp2.htm

la tem um exemplo que salva em access

KURTGU 11/10/2012 11:25:17
#411817
Por que nao salvar o caminho da foto?
ALEVALE 11/10/2012 11:42:42
#411820
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.
JONATHANPR 13/10/2012 15:17:19
#412001
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.
Tópico encerrado , respostas não são mais permitidas