Visual Basic 6 - Capturando imagens de uma WebCam


Capturar imagens de uma WebCam com o Visual Basic 6.0 é mais fácil do que você pensa. Algumas linhas de código e a utilização de algumas APIs do Windows são o suficiente.  Vamos então ao trabalho.

Inicie um novo projeto no Visual Basic 6 com service pack atualizado do tipo Standar EXE com um nome sugestivo como web Cam.

Veja também a colaboração : VB - Usando uma Webcam. para obter detalhes das APIs usadas.

No formulário padrão altere o nome para frmwebcam e inclua os seguintes controles:

Abra o formulário e no início digite as seguintes linhas de código:

Private Declare Function capCreateCaptureWindow Lib "avicap32.dll" Alias "capCreateCaptureWindowA" (ByVal lpszWindowName As String, ByVal dwStyle As Long,
ByVal X As Long, ByVal Y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hwndParent As Long, ByVal nID As Long) As Long
Private Declare Function SendMessage Lib "USER32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Function ReleaseCapture Lib "USER32" () As Long
Private Const WM_CAP_DRIVER_CONNECT As Long = 1034
Private Const WM_CAP_DRIVER_DISCONNECT As Long = 1035
Private Const WM_CAP_GRAB_FRAME As Long = 1084
Private Const WM_CAP_EDIT_COPY As Long = 1054
Private Const WM_CAP_DLG_VIDEOFORMAT As Long = 1065
Private Const WM_CAP_DLG_VIDEOSOURCE As Long = 1066
Private Const WM_CLOSE = &H10
Private mCapHwnd As Long

Vamos usar as funções :

Todo o trabalho é feita pelas APIs do Windows que capturam a imagem da webCam e salvam na área de transferência do Windows (ClipBoard). Ao final basta obter a imagem do ClipBoard e exibir no controle PictureBox.

O código do botão que inicia a webCam é o seguinte :

Private Sub cmdIniciaWebCam_Click()
   'Inicia a câmera
   mCapHwnd = capCreateCaptureWindow("captura Janela", 0, 0, 0, 320, 240, Me.hwnd, 0)
   SendMessage mCapHwnd, WM_CAP_DRIVER_CONNECT, 0, 0
End Sub

O código do evento Timer do controle Timer  é dado a seguir. Inicialmente o controle não esta ativo pois sua propriedade Enabled esta com o valor padrão igual a False;

Private Sub Timer1_Timer()

   'Exibe imagem continua no pictubox
   Clipboard.Clear
   SendMessage mCapHwnd, WM_CAP_GRAB_FRAME, 0, 0
   SendMessage mCapHwnd, WM_CAP_EDIT_COPY, 0, 0
   Picture1.Picture = Clipboard.GetData
   DoEvents
End Sub

Para ativar o vídeo contínuo capturando toda a operação realizada pela WebCam usamos o código abaixo do botão : Ativar Vídeo Contínuo;

Private Sub cmdAtivaVideoContinuo_Click()
   Timer1.Enabled = True
   Timer1.Interval = 50
End Sub

Para capturar a imagem da webCam e exibir no controle PictureBox usamos o seguinte código:

Private Sub cmdCapturaImagem_Click()

  'Captura a imagem atual
  Clipboard.Clear
  SendMessage mCapHwnd, WM_CAP_GRAB_FRAME, 0, 0
  SendMessage mCapHwnd, WM_CAP_EDIT_COPY, 0, 0
  Picture1.Picture = Clipboard.GetData
End Sub

A seguir temos o código do botão que encerra a conexão com a webCam e o código que encerra a aplicação. Repetimos o código no evento Form_Terminate pois se o usuário encerrar o formulário a webCam também será desconectada:

Private Sub cmdEncerraWebCam_Click()
   'Desliga a câmera
   SendMessage mCapHwnd, WM_CAP_DRIVER_DISCONNECT, 0, 0
End Sub

Private Sub cmdSair_Click()
   End
End Sub

Private Sub Form_Terminate()
   'Desliga a câmera
   SendMessage mCapHwnd, WM_CAP_DRIVER_DISCONNECT, 0, 0
End Sub

Executando o projeto teremos como resultado:

Testei e funcionou perfeitamente na minha webCam , uma Microsoft LifeCam.   

Pegue o projeto aqui:  WebCam.zip

O código pode ser melhorado evitando as repetições que usei por questão de simplicidade e tempo.

Até o próximo artigo ...

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

 Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter
 

Referências:


José Carlos Macoratti