Acceso a la webcam Silverlight 5

Silverlight nos permite capturar video proveniente de la webcam que tengamos instalada en nuestra pc, esta característica fue añadida en la versión 4 de Silverlight la cual nos provee varias clases para la captura de video, imágenes y audio provenientes de cualquier dispositivo compatible que tengamos instalado. 

Como iniciar la webcam


Creamos una aplicación Silverlight y agregamos dos controles un rectángulo y un botón los cuales nos servirán para presentar el video y para iniciar la captura de webcam respectivamente.


Hacemos doble clic sobre el botón para agregar un controlador de eventos en el que agregaremos lo siguiente:

VideoCaptureDevice webcam = CaptureDeviceConfiguration.GetDefaultVideoCaptureDevice();
AudioCaptureDevice audio = CaptureDeviceConfiguration.GetDefaultAudioCaptureDevice();

captureSource.VideoCaptureDevice = webcam;
captureSource.AudioCaptureDevice = audio;

Con esto obtenemos el dispositivo de video y audio por defecto y lo asignamos a captureSource que es un objeto de la clase CaptureSource que interactúa con los dispositivos de captura seleccionados.

if (CaptureDeviceConfiguration.RequestDeviceAccess() && captureSource.VideoCaptureDevice != null)
{
    try
    {
        captureSource.Start();

        VideoBrush webcamBrush = new VideoBrush();
        webcamBrush.SetSource(captureSource);
        webRect.Fill = webcamBrush;
    }
    catch (InvalidOperationException ex)
    {
        MessageBox.Show("No se ha podido iniciar la webcam.");
    }
}


Otra cosa de debemos hacer es pedir permiso RequestDeviceAccess de la clase CaptureDeviceConfiguration se encarga de ello, para iniciar la captura llamamos al método Start del objeto captureSorce, y para finalizar solo debemos mostrar el video lo cual lo hacemos creando una brocha de video y asignándola el rectángulo que creamos.

Para detener la captura solo debemos llamar al método Stop.

Capturar una imagen 


Si queremos guardar una imagen de algún cuadro del video podemos hacerlo, para ello modificaremos el código xaml para agregar otro rectángulo y otro botón, el primero para presentar la imagen capturada y el botón para iniciar la captura de la imagen.


Primero agregamos el controlador de eventos para el botón de captura de imagen en el cual iniciamos la captura con el siguiente código:

if (captureSource.VideoCaptureDevice != null && captureSource.State == CaptureState.Started)
{
    captureSource.CaptureImageAsync();
}

La clase CapturaSource cuenta con los eventos CaptureFailed y CaptureImageCompleted para indicar cuando la captura de la imagen falla o se ha completado espectivamente, por lo que si la captura de la webcam ha sido exitosa debemos agregar el código para mostrar la imagen, para ello creamos un ImageBrush y a su propiedad ImageSource le asignamos un WriteableBitmap que nos devuelve el evento CaptureImageCompleted en su propiedad Result.

captureSource.CaptureImageCompleted += (sender, args) =>
{
    ImageBrush capturedImage = new ImageBrush();
    capturedImage.ImageSource = args.Result;
    imageRect.Fill = capturedImage;
};

captureSource.CaptureFailed += (sender, args) =>
{
    MessageBox.Show("La captura a fallado.");
};


Comentarios

Temas relacionados

Entradas populares de este blog

tkinter Grid

tkinter Canvas

Controles y Contenedores JavaFX 8 - I

Histogramas OpenCV Python