Modulo20 Camara

1,739 views

Published on

Vamos a utilizar la API de la Cámara para poder acceder al Viewport de la misma en tiempo real. Estas características nos van a permitir crear escaneo de imágenes y aplicaciones que utilicen realidad aumentada. También veremos cómo acceder al flash y ajustar el enfoque de la cámara.

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,739
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
4
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Modulo20 Camara

  1. 1. 9/26/2011 Cámara en Mango  Acceso programático a la cámara permite  Crear una App de cámara con un ViewFinder  Acceso en tiempo real a cada frame de la cámara  Ajustar resolución de la imagen capturada  Manipular enfoque y flash  Detección y consulta de la capacidades de la cámara (flash…)  Acceso al botón hardware de disparo para capturar fotos  Configurar autoenfoque  CameraCaptureTask permite lanzar la cámara desde una AppCámara en Mango Imágenes  Mango presenta conjunto de APIs extendienden experiencia cámara e imágenes: • APIs manejadas para codificar/decodificar imágenes • Almacenar imágenes en Media Library • App Connect para extender la aplicación de cámara nativa • App Connect para extender Hub imágenes • Subir imágenes a un Servicio Web 1
  2. 2. 9/26/2011 Acceso a la cámara Acceso a la cámara Dos métodos de acceso a la cámara  Espacio de nombres: − Microsoft.Devices  API nativa  para Apps con escenarios fotográficos • Fotografías alta resolución − Microsoft.Phone • Uso del botón hardware de disparo − System.Windows.Media.Imaging • Acceso a flash y autoenfoque  Clases  API Silverlight 4 webcam  Apps orientadas a vídeo y para  Extensions  codificar WriteableBitmap en JPEG Stream o portar Aplicaciones de SL 4 al teléfono decodificar JPEG en WriteableBitmap • Grabación de audio y video en un fichero  PictureDecoder  decodificar JPEG Stream en WriteableBitmap • Reaprovechamiento de código de SL 4  PhotoCamera  representa funcionalidad básica de la cámara, permite habilitar y configurar:  Pueden combinarse para crear Apps de realidad aumentada • Captura de imagen • Enfoque • Flash Utilizando la cámara Utilizando la cámara Permitir uso de la cámara  Capturar imagen  Agregar capacidad ID_CAP_ISV_Camera al fichero // Captura de una imagen. Se lanzarán eventos cuando la imagen y su WMAppManifest.xml // thumbnail estén disponibles try <Ca pa bility Na me="ID_CAP_ISV_CAMERA"/> { cam.CaptureImage(); Mostrar e inicializar la cámara } catch (Exception ex) { PhotoCamera cam = cam = new Microsoft.Devices.PhotoCa mera(); this.Dispatcher.BeginInvoke(delegate() // Evento lanzado cuando el objeto PhotoCamera ha sido inicializado { cam.Initialized += new EventHandler<Microsoft.Devices.CameraO perationComplete dEventArgs> (cam_Initia lize d); // No se puede capturar una imagen hasta que no se haya completado la // Evento lanzado cuando la se ha complertado la secuencia de captura cam.CaptureCompleted += new EventHandler<CameraOperationComplete dEventArgs> (cam_ CaptureComplete d); // captura anterior. // Evento lanzado cuando la se ha complertaodo la secuencia de captura y hay una imagen disponible txtDebug.Text = ex.Message; cam.CaptureImageAvailable += new EventHandler<Microsoft.Devices.ContentReadyEventArgs>(cam_CaptureImageAvailable); }); // Evento lanzado cuando la se ha complertado la secuencia de captura y hay una imagen miniatura disponible } cam.CaptureThumbnailAvailable += new EventHandler<ContentReadyEventArgs> (cam_ Capture Thumbna ilAvailable); // Establece la cámara como fuente de video del control miVideoBrush.SetSource(cam); 2
  3. 3. 9/26/2011 Guardar imagen en IS y Media Uso del flash Library void cam_CaptureImageAvailable(obje ct sender, Microsoft.Devices.ContentReadyEventA rgs e) {  Enumeración FlashMode Deployment.Current.Dis patcher.BeginInvoke(de legate() • Off: deshabilita el flash de la cámara { MessageBox.Show( "Imagen capturada disponible/salvando imagen…"); • On: habilita el flash de la cámara // Almacenar imagen en Media library. MediaLibrary library = new MediaLibrary(); • RedEyeReduction: habilita la reducción de ojos rojos library.SavePictureToCamera Roll(file Name, e.ImageStream); • Auto: deja el flash de la cámara en modo automático // Almacenar la imagen como un JPEG en almacenamiento aislado BitmapImage bmpImage = new BitmapImage(); switch (cam.FlashMode) bmpImage.CreateOptions = BitmapCreateOptions.None; { bmpImage.SetSource(e.ImageStream); case FlashMode.Of f : using (IsolatedStorageFile isStore = IsolatedStorageFile.GetUserStoreForApplica tion()) if (cam.IsFlashModeSupported(FlashMode.Of f )) { { cam.FlashMode = FlashMode.Of f ; } using (IsolatedStorageFileStream targetStream = isStore.OpenFile(fileName, FileMode.Create, FileAccess.Write)) break; case FlashMode.RedEy eReduction: { if (cam.IsFlashModeSupported(FlashMode.RedEy eReduction)) WriteableBitmap bitmap = new WriteableBitmap(bmpImage); { cam.FlashMode = FlashMode.RedEy eReduction; } bitmap.SaveJpeg(targetStream, bitmap.PixelWidth, bitmap.PixelHeight, 0, 100); t break; MessageBosx.Show( "Imagen guardada. "); case FlashMode.Auto: } if (cam.IsFlashModeSupported(FlashMode.Auto)) } { cam.FlashMode = FlashMode.Auto; } }); break; } } Acceso al botón hardware de AutoEnfoque disparo  Mango da la posibilidad de acceder al botón hardware// Ev ento lanzado cuando f inaliza el autoenf oque desde códigocam.AutoFocusCompleted += new Ev entHandler<CameraOperationCompletedEv entArgs>(cam_AutoFocusCompleted );priv ate v oid f ocus_Clicked(object sender, Sy stem.Windows.RoutedEv entArgs e)  Controlado por los eventos:{ // Enf ocar cuando no hay captura en proceso • ShutterKeyHalfPressed  lanzado cuando el botón se try presiona durante 800 ms { } cam.Focus(); • ShutterKeyPressed lanzado al pulsar completamente el catch (Exception f ocusError) v oid cam_AutoFocusCompleted(object sender, botón { // NO es posible enf ocar cuando una captura está en progreso CameraOperationCompletedEv entArgs e) this.Dispatcher.BeginInv oke(delegate() { • ShutterKeyPressed lanzado al liberar el botón if (e.Succeeded) { MessageBox.Show( f ocusError.Message); { }); Deploy ment.Current.Dispatcher.BeginInv oke(delegate()} } { MessageBox.Show("Autoenf oque f nalizado");  Se recomienda su uso botón frente al acceso } }); mediante código al autoenfoque y captura de } imágenes 3
  4. 4. 9/26/2011 Recursos  Centro de desarrollo de WP7 en MSDN http://msdn.microsoft.com/es-es/windowsphone/default.aspx  AppHub http://create.msdn.com/DEMO  Windows Phone Developer Blog http://windowsteamblog.com/windows_phone/b/wpdev  MobileNUG http://www.mobilenug.es  Forums http://forums.create.msdn.com/forums/ 4

×