SlideShare ist ein Scribd-Unternehmen logo
1 von 4
Downloaden Sie, um offline zu lesen
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
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
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
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

Weitere ähnliche Inhalte

Mehr von Eduardo

Modulo9 Background Agents
Modulo9 Background AgentsModulo9 Background Agents
Modulo9 Background AgentsEduardo
 
Modulo8 Servicio De Notificaciones
Modulo8 Servicio De NotificacionesModulo8 Servicio De Notificaciones
Modulo8 Servicio De NotificacionesEduardo
 
Modulo7 Bases de Datos
Modulo7 Bases de DatosModulo7 Bases de Datos
Modulo7 Bases de DatosEduardo
 
Modulo5 Trucos Web Browser
Modulo5 Trucos Web BrowserModulo5 Trucos Web Browser
Modulo5 Trucos Web BrowserEduardo
 
Modulo4 Indicadores De Progreso
Modulo4 Indicadores De ProgresoModulo4 Indicadores De Progreso
Modulo4 Indicadores De ProgresoEduardo
 
Modulo3 Launchers&amp;Choosers
Modulo3 Launchers&amp;ChoosersModulo3 Launchers&amp;Choosers
Modulo3 Launchers&amp;ChoosersEduardo
 
Modulo 2 Modelo Ejecucion
Modulo 2 Modelo EjecucionModulo 2 Modelo Ejecucion
Modulo 2 Modelo EjecucionEduardo
 
Modulo1 Herramientas De Desarrollo Wp7 1
Modulo1 Herramientas De Desarrollo Wp7 1Modulo1 Herramientas De Desarrollo Wp7 1
Modulo1 Herramientas De Desarrollo Wp7 1Eduardo
 

Mehr von Eduardo (8)

Modulo9 Background Agents
Modulo9 Background AgentsModulo9 Background Agents
Modulo9 Background Agents
 
Modulo8 Servicio De Notificaciones
Modulo8 Servicio De NotificacionesModulo8 Servicio De Notificaciones
Modulo8 Servicio De Notificaciones
 
Modulo7 Bases de Datos
Modulo7 Bases de DatosModulo7 Bases de Datos
Modulo7 Bases de Datos
 
Modulo5 Trucos Web Browser
Modulo5 Trucos Web BrowserModulo5 Trucos Web Browser
Modulo5 Trucos Web Browser
 
Modulo4 Indicadores De Progreso
Modulo4 Indicadores De ProgresoModulo4 Indicadores De Progreso
Modulo4 Indicadores De Progreso
 
Modulo3 Launchers&amp;Choosers
Modulo3 Launchers&amp;ChoosersModulo3 Launchers&amp;Choosers
Modulo3 Launchers&amp;Choosers
 
Modulo 2 Modelo Ejecucion
Modulo 2 Modelo EjecucionModulo 2 Modelo Ejecucion
Modulo 2 Modelo Ejecucion
 
Modulo1 Herramientas De Desarrollo Wp7 1
Modulo1 Herramientas De Desarrollo Wp7 1Modulo1 Herramientas De Desarrollo Wp7 1
Modulo1 Herramientas De Desarrollo Wp7 1
 

Modulo20 Camara

  • 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