Capturar imágenes desde una Webcam en C#
O cómo desarrollar una cámara de fotos en Visual Studio y con nuestra propia Webcam. Es lo que hoy voy a mostraros.
En primer lugar, he creado un formulario como el siguiente:
En él vamos a usar dos PictureBox, un Button para capturas las imágenes, un TextBox donde escribir la ruta de guardado de la imagen, y un Button más para guardarla.
A continuación, vamos a pasar a importar a nuestro proyecto las librerías necesarias para hacer uso del driver de la Webcam. Estas librerías podéis descargarlas desde aquí.
Para hacer la importación, desde el Explorador de soluciones, hacemos clic derecho sobre References y Agregar referencia. Desde la pestaña Examinar buscamos nuestros dos ficheros descargados: AForge.Video.DirectShow.dll y AForge.Video.dll Y finalmente los declaramos al inicio del proyecto:
using AForge.Video; using AForge.Video.DirectShow;
El siguiente paso será iniciar la captura de imágenes desde nuestra Webcam y mostrarlo en el primer PictureBox (pctbox_webcam). Esto lo haremos durante la carga del formulario, en el evento Load:
if (existenDispositivos)
{
fuenteDeVideo = new VideoCaptureDevice(dispositivosDeVideo[0].MonikerString);
fuenteDeVideo.NewFrame += new NewFrameEventHandler(MostrarImagen);
fuenteDeVideo.Start();
}
else
{
MessageBox.Show("No se encuentra ningún dispositivo de vídeo en el sistema", "Información", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
CerrarFormulario();
}
Cuando hagamos clic sobre el botón Capturar deberemos usar el siguiente código:
if (fuenteDeVideo != null)
{
if (fuenteDeVideo.IsRunning)
pctbox_imagen.Image = pctbox_webcam.Image;
}
Y si queréis conocer cómo guardar dicha imagen en un fichero, pues al hacer clic sobre Guardar usaremos el siguiente fragmento:
// Recorto la imagen conforme lo mostrado (Size del pctbox_webcam)
Rectangle formaRecorte = new Rectangle(0, 0, 300, 300);
Bitmap imagenOrigen = (Bitmap)pctbox_imagen.Image;
Bitmap imagen = imagenOrigen.Clone(formaRecorte, imagenOrigen.PixelFormat);
// Y la guardo
try
{
String ruta = txbox_ruta.Text.Trim();
if (!ruta.Substring(ruta.Length - 1).Equals("\\"))
ruta += "\\";
ruta += "CapturaWebcam.bmp";
imagen.Save(ruta);
MessageBox.Show("Fotografía almacenada", "Información", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
catch (Exception exc)
{
MessageBox.Show(exc.Message, "Información", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
El resultado final, con un poco más de código, es el siguiente:
En cualquier caso, si queréis el proyecto completo para verlo funcionando e indagar un poco más el código, os lo dejo para descargar:
Recurso | Proyecto en Visual Studio 2008











Comentarios recientes