Hola y bienvenidos a este nuevo tutorial, está vez vamos a convertir nuestro Kinect en una cámara fotográfica.

- Crea un nuevo proyecto en Visual Studio 2012 o 2010 de C# tipo Aplicación WPF con el nombre de tu preferencia.
- Agrega la referencia Windows.Kinect.dll
- En la ventana agrega los siguientes controles:
– Image: VideoControl
– Button Inicio: BtnBgn
– Button Guardar Imagen: BtnSave
– Button Detener: BtnStop
– Button Salir: BtnExit
*A todos los button agrega el evento Clic.
Ahora es tiempo de programar, nos vamos al MainWindows.xaml.cs
- Agrega las siguientes librería: Using Microsoft.Kinect;
- Antes del MainWindows() agrega lo siguiente: private KinectSensor sensor; private byte[] pixelData;
Una vez que tengamos todo listo es hora de iniciar con nuestro ejercicio.
- Da clic en la ventana y agrega el evento Loaded y en el MainWindow agrega this.Loaded += this.MainWindow_Loaded;
- Y en el evento Loaded agregaremos

- Nos permitirá saber si hay uno o más sensores conectados a nuestro computador.
- Esta línea de código encuentra el objeto KinectSensor en la colección junto con su estatus, estatus que será asignado a la propiedad sensor.
- Iniciamos el Sensor
- Deshabilitamos el ColorStream [Obtiene la secuencia de colores para el Kinect.]
- Con esto, el control de su aplicación se traslada a la sensor_ColorFrameReady controlador de eventos donde el proceso marco de imagen tiene que ser hecho.
- Con este en caso de que no encuentre ningún sensor conectado al ordenador lanza un mensaje de notificación y cierra la ventana automáticamente.
Creación de Imagen

- OpenColorImageFrame() que devuelve un marco de imagen del tipo ColorImageFrame. Ahora pudemos utilizar este mismo código exacto para trabajar marcos de imagen.
- Compruebaa si el marco entrante no es null.
- Obtiene los datos de los píxeles en la matriz/arreglo de bytes.
- Copia los datos de píxeles.
- Calcular la stride.
- Asignamos el mapa de bits en VideoControl image. Utilizando las dimensiones del image y utilizando el PixelFormats Bgr32 que es el formato del pixel de 32 bits por pixel.Cada canal de color (azul, verde y rojo) se le asignan 8 bits por píxel (BPP).
Inclusive nosotros podemos jugar con esta parte es decir si cambiamos de Bgr32 a Cmyk32 obtendríamos los siguientes resultados. Dentro de las opciones que te da PixelFormats puedes escoger la que más te guste y tomar las fotografías que quieras y divertirte un buen rato con tu aplicación.
Hasta aquí ya tenemos lo principal, si corremos nuestra aplicación en este momento obtendremos lo siguientes resultados.

Eventos Clic
Antes de encender y/o apagar el dispositivo hay que cerciorarse de que esté conectado y que nos indique si es posible interactuar con el sensor y para ello agregamos en todos los eventos lo siguiente.
if (this.sensor != null && !this.sensor.IsRunning)
Encender/Iniciar el sensor.
this.sensor.Start();
Detener el sensor.
this.sensor.Stop();
Para salir de la ventana primero detenemos el sensor y después ahora si cerramos la ventana.
this.sensor.Stop();
this.Close();
Guardar imagen.
Para ser un poco más ordenados y que no se vea el código todo amontonado crearemos un método llamado SaveImage donde nos permitirá guardar las imágenes.

- Como es un ejemplo simple le daremos un nombre estático a nuestra imagen a guardar en mi caso será: “Mi primer foto con Kinect.jpg” y de daré el formato de .jpg
- Para verificar que no marque error al guardar la segunda imagen y se me detenga la aplicación le estoy diciendo que si encuentra una imagen con el mismo nombre sobre escriba o elimine para sustituirla por la nueva.
- Aquí es donde guardamos la imagen, creamos un FileStream con el nombre de la imagen y le decimos que el contenido de la imagen es la que contiene nuestra image, en mi caso la guardare en formato .jpg y es por eso que utilizo JpegBitmapEncoder para definir un codificador que se usa para codificar imágenes a ese formato y finalmente la guardo.
Y ya terminamos ahora si podemos correr nuestra aplicación y al guardar una imagen nos dará el siguiente resultado.
*Las dimensiones de la imagen resultante son de 640 x 480.
*La imagen se guardará en la carpeta del paquete de la aplicación en la carpeta Bin > Debug.

~ Hasta la próxima 🙂 ~