Captura de fotos en la aplicación Windows Store para Windows Phone

Bueno, mi pregunta es simple:
¿Cómo capturo imágenes con una Windows Store App de Windows Phone 8.1 Windows Store App para Windows Phone 8.1 usando la cámara?
Los ejemplos en MSDN usan Windows.Media.Capture.CameraCaptureUI , que no se puede usar en Windows Phone, o son para Silverlight .
No puedo encontrar ningún documento o muestra específicamente para la aplicación Windows Phone con Windows Runtime.
Si alguien sabe, o incluso tiene el documento para esto, me alegraría.

En WP8.1 Runtime (también en Silverlight) puede usar MediaCapture . En breve:

 // First you will need to initialize MediaCapture Windows.Media.Capture.MediaCapture takePhotoManager = new Windows.Media.Capture.MediaCapture(); await takePhotoManager.InitializeAsync(); 

Si necesita una vista previa, puede usar un elemento CaptureElement :

 // In XAML:  

Luego, en el código de detrás puede iniciar / detener la vista previa de esta manera:

 // start previewing PhotoPreview.Source = takePhotoManager; await takePhotoManager.StartPreviewAsync(); // to stop it await takePhotoManager.StopPreviewAsync(); 

Finalmente, para tomar una foto, puede, por ejemplo, llevarla directamente a un archivo CapturePhotoToStorageFileAsync oa Stream CapturePhotoToStreamAsync :

 ImageEncodingProperties imgFormat = ImageEncodingProperties.CreateJpeg(); // a file to save a photo StorageFile file = await ApplicationData.Current.LocalFolder.CreateFileAsync( "Photo.jpg", CreationCollisionOption.ReplaceExisting); await takePhotoManager.CapturePhotoToStorageFileAsync(imgFormat, file); 

Si desea capturar video, aquí hay más información .

Además, no olvide agregar Webcam en Capabilities de su archivo de manifiesto y Front/Rear Camera en Requirements .


En caso de que necesite elegir una cámara (adelante / atrás), necesitará obtener la Id. De cámara y luego inicializar MediaCapture con la configuración deseada:

 private static async Task GetCameraID(Windows.Devices.Enumeration.Panel desired) { DeviceInformation deviceID = (await DeviceInformation.FindAllAsync(DeviceClass.VideoCapture)) .FirstOrDefault(x => x.EnclosureLocation != null && x.EnclosureLocation.Panel == desired); if (deviceID != null) return deviceID; else throw new Exception(string.Format("Camera of type {0} doesn't exist.", desired)); } async private void InitCamera_Click(object sender, RoutedEventArgs e) { var cameraID = await GetCameraID(Windows.Devices.Enumeration.Panel.Back); captureManager = new MediaCapture(); await captureManager.InitializeAsync(new MediaCaptureInitializationSettings { StreamingCaptureMode = StreamingCaptureMode.Video, PhotoCaptureSource = PhotoCaptureSource.Photo, AudioDeviceId = string.Empty, VideoDeviceId = cameraID.Id }); } 

En las aplicaciones universales Windows Phone 8.1 (WinRT) ya no es posible saltar directamente a la aplicación de la cámara incorporada y recibir una callback cuando se toma una foto.

Para hacerlo, debe implementar Windows.Media.Capture.MediaCapture como se describe arriba. Solía ​​haber CameraCatureUI pero no está disponible en las aplicaciones WinRT para Windows Phone 8.1.

Sin embargo, hay una solución”. Puede usar Windows.Storage.Pickers.FileOpenPicker y configurarlo para elegir imágenes. Ahora el selector tendrá un botón de cámara. El usuario puede hacer clic en el botón de la cámara y se abrirá la aplicación de la cámara incorporada. Una vez que el usuario ha tomado una foto, recibirá una callback en su aplicación. La FileOpenPicker llamada FileOpenPicker es un poco molesto de implementar, pero funciona. Si puede vivir con las implicaciones de usabilidad, este podría ser un enfoque válido.

Hubo una sesión sobre este tema durante Microsofts build-Conference en 2014. Puede ver la sesión en línea con este enlace.

Puede tomar el enfoque en este enlace. Todo se explica muy bien.

Solo usa la clase PhotoCamera y no olvides habilitar el uso de la cámara en el manifiesto de tu aplicación