C# - Capturando e Salvando Imagens da WebCam (revisitado)

 

 Neste artigo eu vou mostrar mais uma forma de capturar e salvar imagens a partir de uma WebCam instalada em um computador local.

Este é um artigo para iniciantes que mostra mais uma maneira de capturar imagens de uma WebCam local salvando-as no sistema de arquivos.

Neste exemplo estou usando a biblioteca DirectX que segue junto com o projeto.

Recursos usados:

Nota: Baixe e use a versão Community 2015 do VS ela é grátis e é equivalente a versão Professional.

Criando o projeto no VS Community

Abra o VS Community 2015 e clique em New Project;

Selecione a linguagem Visual C# e o template Windows Forms Application;

Informe o nome CapturaImagemWebCam e clique no botão OK;

No formulário form1.cs inclua a partir da ToolBox os seguintes controles:

Disponha os controles conforme o leiaute da figura a seguir:

A seguir declare os seguintes namespaces no formulário form1.cs:

using System;
using
System.Drawing;
using
System.Windows.Forms;
using
System.Drawing.Imaging;

No início do formulário vamos declarar as variáveis que iremos usar no projeto:

public DirectX.Capture.Filter Camera;
public DirectX.Capture.Capture CaptureInfo;
public DirectX.Capture.Filters CamContainer;
Image capturaImagem;
public string caminhoImagemSalva = null;

No evento Load do formulário vamos incluir o código abaixo que identifica o dispositivo WebCam e exibe a imagem em picWebCam e captura a imagem em picImagem:

        private void Form1_Load(object sender, EventArgs e)
        {
           CamContainer = new DirectX.Capture.Filters(); 

           try
           {
             int no_of_cam = CamContainer.VideoInputDevices.Count;

             for (int i = 0; i < no_of_cam; i++ )
             {
                try
                {
                        // obtém o dispositivo de entrada do vídeo
                        Camera = CamContainer.VideoInputDevices[i];

                        // inicializa a Captura usando o dispositivo
                        CaptureInfo = new DirectX.Capture.Capture(Camera, null);                                                                       

                        // Define a janela de visualização do vídeo
                        CaptureInfo.PreviewWindow = this.picWebCam;

                        // Capturando o tratamento de evento
                        CaptureInfo.FrameCaptureComplete += AtualizaImagem;                                                

                        // Captura o frame do dispositivo
                        CaptureInfo.CaptureFrame();                        

                        // Se o dispositivo foi encontrado e inicializado então sai sem checar o resto
                        break;
                }
                catch (Exception ex)
                {
                    throw ex;   
                }
            }
        }
        catch (Exception ex)
        {               
            MessageBox.Show(this, ex.Message);
        }
    }

No método AtualizaImagem temos o código que captura a imagem da webcam no picturebox picImagem:

    public void AtualizaImagem(PictureBox frame)
    {
            try
            {
                capturaImagem = frame.Image;
                this.picImagem.Image = capturaImagem;
            }
            catch (Exception ex)
            {
                MessageBox.Show("Erro " + ex.Message);
            }
    }

Para capturar outro frame da WebCam basta clicar no botão Capturar Imagem que possui o seguinte código no seu evento Click:

  private void btnCaptura_Click(object sender, EventArgs e)
   {
            try
            {
                CaptureInfo.CaptureFrame();
            }
            catch (Exception ex)
            {
                MessageBox.Show("Erro " + ex.Message);
            }
   }

Finalmente no evento Click do botão Salvar Imagem digite o código a seguir:

     private void btnSalvar_Click(object sender, EventArgs e)
     {
            try
            {
                caminhoImagemSalva = @"c:\dados\" + "ImagemWebCam" +                                   DateTime.Now.Day.ToString() + DateTime.Now.Month.ToString() +                 DateTime.Now.Year.ToString() + DateTime.Now.Millisecond.ToString() + ".jpg";

                picImagem.Image.Save(caminhoImagemSalva, ImageFormat.Jpeg);

                MessageBox.Show("Imagem salva com sucesso");
            }
            catch(Exception ex)
            {
                MessageBox.Show("Erro " + ex.Message);
            }
   }

Este código salva a imagem em uma pasta pré-definida com o nome ImagemWebCam mais o dia, o mês, o ano e os milesegundos.

Agora é só alegria...

Executando o projeto e capturando uma imagem temos o seguinte resultado:

Fique a vontade para alterar o projeto e incrementar novas funcionalidades.

Pegue o projeto completo aqui:  CapturaImagemWebCam.zip

Porque do céu se manifesta a ira de Deus sobre toda a impiedade e injustiça dos homens, que detêm a verdade em injustiça.
Porquanto o que de Deus se pode conhecer neles se manifesta, porque Deus lho manifestou.
Porque as suas coisas invisíveis, desde a criação do mundo, tanto o seu eterno poder, como a sua divindade, se entendem, e claramente se vêem pelas coisas que estão criadas, para que eles fiquem inescusáveis;


Romanos 1:18-20

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 ?


Referências:


José Carlos Macoratti