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.
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
App
Cá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. 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. 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ódigo
cam.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. 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