Eh bien, ma question est simple:
Comment capturer des images avec un Windows Store App
pour Windows Phone 8.1
à l'aide de l'appareil photo?
Les exemples sur MSDN utilisent Windows.Media.Capture.CameraCaptureUI
, qui ne peut pas être utilisé sur Windows Phone ou sur Silverlight
.
Je ne trouve aucun document ni échantillon spécifique à l'application Windows Phone utilisant Windows Runtime.
Si quelqu'un sait ou a même le doc pour cela, je serais heureux.
Dans WP8.1 Runtime (également dans Silverlight), vous pouvez utiliser MediaCapture . En bref:
// First you will need to initialize MediaCapture
Windows.Media.Capture.MediaCapture takePhotoManager = new Windows.Media.Capture.MediaCapture();
await takePhotoManager.InitializeAsync();
Si vous avez besoin d'un aperçu, vous pouvez utiliser un CaptureElement :
// In XAML:
<CaptureElement x:Name="PhotoPreview"/>
Ensuite, dans le code suivant, vous pouvez démarrer/arrêter la prévisualisation de la manière suivante:
// start previewing
PhotoPreview.Source = takePhotoManager;
await takePhotoManager.StartPreviewAsync();
// to stop it
await takePhotoManager.StopPreviewAsync();
Enfin, pour prendre une photo, vous pouvez par exemple l’envoyer directement dans un fichier CapturePhotoToStorageFileAsync ou dans un flux 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 vous voulez capturer une vidéo, alors voici plus d’informations .
N'oubliez pas non plus d'ajouter Webcam
dans Capabilities
de votre fichier de manifeste et Front/Rear Camera
dans Requirements
.
Si vous devez choisir une caméra (avant/arrière), vous devrez obtenir l’ID de la caméra, puis initialiser MediaCapture
avec les paramètres souhaités:
private static async Task<DeviceInformation> 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
});
}
Dans les applications universelles Windows Phone 8.1 (WinRT), il n'est plus possible de sauter directement dans l'application pour appareil photo intégré et de recevoir un rappel lorsqu'une photo a été prise.
Pour ce faire, vous devez implémenter Windows.Media.Capture.MediaCapture
comme décrit ci-dessus. Il existait auparavant CameraCatureUI
mais il n’est pas disponible dans les applications WinRT pour Windows Phone 8.1.
Cependant, il existe une "solution de contournement". Vous pouvez utiliser Windows.Storage.Pickers.FileOpenPicker
et le configurer pour choisir des images. Maintenant, le sélecteur aura un bouton de caméra. L'utilisateur peut cliquer sur le bouton de la caméra pour ouvrir l'application de la caméra intégrée. Une fois que l'utilisateur a pris une photo, vous recevez un rappel dans votre application. Le callback FileOpenPicker
est un peu ennuyeux à implémenter, mais cela fonctionne. Si vous pouvez vivre avec les implications en termes de convivialité, cela pourrait être une approche valable.
Il y a eu une session sur ce sujet lors de la conférence de construction Microsofts en 2014. Vous pouvez regarder la session en ligne avec ce lien.
Vous pouvez prendre l'approche sur this link. Tout est expliqué très bien.
Utilisez simplement la classe PhotoCamera
et n'oubliez pas d'activer l'utilisation de la caméra dans le manifeste de votre application.