Capturez des photos et des vidéos avec l’interface utilisateur de l’appareil photo intégré WindowsCapture photos and video with the Windows built-in camera UI

Cet article explique comment utiliser la classe CameraCaptureUI pour capturer des photos ou des vidéos à l’aide de l’interface utilisateur de l’appareil photo intégrée à Windows.This article describes how to use the CameraCaptureUI class to capture photos or videos by using the camera UI built into Windows. Cette fonctionnalité est facile à utiliser.This feature is easy to use. Il permet à votre application d’obtenir une photo ou une vidéo capturée par l’utilisateur avec seulement quelques lignes de code.It allows your app to get a user-captured photo or video with just a few lines of code.

Si vous voulez fournir votre propre interface utilisateur d’appareil photo ou si votre scénario nécessite un contrôle de bas niveau plus robuste de l’opération de capture, utilisez l’objet MediaCapture et implémentez votre propre expérience de capture.If you want to provide your own camera UI or if your scenario requires more robust, low-level control of the capture operation, you should use the MediaCapture object and implement your own capture experience. Pour plus d’informations, voir Capture photo, vidéo et audio de base à l’aide de MediaCapture.For more information, see Basic photo, video, and audio capture with MediaCapture.

Notes

Vous ne devez pas spécifier les fonctionnalités de la webcam ou du microphone dans le fichier manifeste de votre application si votre application utilise uniquement CameraCaptureUI.You shouldn't specify the webcam or microphone capabilities in your app manifest file if your app only uses CameraCaptureUI. Dans ce cas, votre application s’affiche dans les paramètres de confidentialité de l’appareil, mais même si l’utilisateur refuse l’accès de l’appareil photo à votre application, cela n’empêche pas le CameraCaptureUI de capturer le média.If you do, your app will be displayed in the device's camera privacy settings, but even if the user denies camera access to your app, this won't prevent the CameraCaptureUI from capturing media.

Cela s’explique par le fait que l’application d’appareil photo intégrée de Windows est une application interne approuvée qui nécessite que l’utilisateur démarre la capture photo, vidéo ou audio en appuyant sur un bouton.This is because the Windows built-in camera app is a trusted first-party app that requires the user to initiate photo, audio, and video capture with a button press. Votre application peut échouer à la certification du kit de certification des applications Windows lorsque celle-ci est soumise à Microsoft Store si vous spécifiez les fonctionnalités de la webcam ou du microphone lorsque vous utilisez CameraCaptureUI comme seul mécanisme de capture de photos.Your app may fail Windows Application Certification Kit certification when submitted to Microsoft Store if you specify the webcam or microphone capabilities when using CameraCaptureUI as your only photo capture mechanism.

Vous devez spécifier les fonctionnalités de la webcam ou du microphone dans le fichier manifeste de votre application si vous utilisez MediaCapture pour capturer des données audio, des photos ou des vidéos par programmation.You must specify the webcam or microphone capabilities in your app manifest file if you're using MediaCapture to capture audio, photos, or video programmatically.

Capturer une photo avec CameraCaptureUICapture a photo with CameraCaptureUI

Pour utiliser l’interface utilisateur de capture d’appareil photo, incluez l’espace de noms Windows.Media.Capture dans votre projet.To use the camera capture UI, include the Windows.Media.Capture namespace in your project. Pour les opérations de fichier avec le fichier image renvoyé, incluez Windows.Storage.To do file operations with the returned image file, include Windows.Storage.

using Windows.Media.Capture;
using Windows.Storage;

Pour capturer une photo, créez un objet CameraCaptureUI.To capture a photo, create a new CameraCaptureUI object. À l’aide de la propriété photosettings de l’objet, vous pouvez spécifier des propriétés pour la photo retournée, telles que le format d’image de la photo.By using the object's PhotoSettings property, you can specify properties for the returned photo, such as the image format of the photo. Par défaut, l’interface utilisateur de capture de l’appareil photo prend en charge le rognage de la photo avant son retour.By default, the camera capture UI supports cropping the photo before it's returned. Cela peut être désactivé à l’aide de la propriété AllowCropping .This can be disabled with the AllowCropping property. Cet exemple définit CroppedSizeInPixels pour demander que l’image renvoyée soit au format 200 x 200 pixels.This example sets the CroppedSizeInPixels to request that the returned image be 200 x 200 in pixels.

Notes

Le rognage d’image dans le CameraCaptureUI n’est pas pris en charge pour les appareils de la famille d’appareils mobiles.Image cropping in the CameraCaptureUI isn't supported for devices in the Mobile device family. La valeur de la propriété AllowCropping est ignorée quand votre application est exécutée sur ces appareils.The value of the AllowCropping property is ignored when your app is running on these devices.

Appelez CaptureFileAsync et spécifiez CameraCaptureUIMode.Photo pour indiquer qu’une photo doit être capturée.Call CaptureFileAsync and specify CameraCaptureUIMode.Photo to specify that a photo should be captured. La méthode renvoie une instance StorageFile contenant l’image si la capture est réussie.The method returns a StorageFile instance containing the image if the capture is successful. Si l’utilisateur annule la capture, l’objet renvoyé est null.If the user cancels the capture, the returned object is null.

CameraCaptureUI captureUI = new CameraCaptureUI();
captureUI.PhotoSettings.Format = CameraCaptureUIPhotoFormat.Jpeg;
captureUI.PhotoSettings.CroppedSizeInPixels = new Size(200, 200); 

StorageFile photo = await captureUI.CaptureFileAsync(CameraCaptureUIMode.Photo);

if (photo == null)
{
    // User cancelled photo capture
    return;
}

L’élément StorageFile qui contient la photo capturée reçoit un nom généré de manière dynamique et est enregistré dans le dossier local de votre application.The StorageFile containing the captured photo is given a dynamically generated name and saved in your app's local folder. Pour mieux organiser vos photos capturées, vous pouvez déplacer le fichier vers un autre dossier.To better organize your captured photos, you can move the file to a different folder.

StorageFolder destinationFolder = 
    await ApplicationData.Current.LocalFolder.CreateFolderAsync("ProfilePhotoFolder", 
        CreationCollisionOption.OpenIfExists);

await photo.CopyAsync(destinationFolder, "ProfilePhoto.jpg", NameCollisionOption.ReplaceExisting);
await photo.DeleteAsync();

Pour utiliser votre photo dans votre application, vous pouvez créer un objet SoftwareBitmap qui peut être utilisé avec plusieurs fonctionnalités différentes des applications Windows universelles.To use your photo in your app, you may want to create a SoftwareBitmap object that can be used with several different Universal Windows app features.

Tout d’abord, incluez l’espace de noms Windows. Graphics. Imaging dans votre projet.First, include the Windows.Graphics.Imaging namespace in your project.

using Windows.Storage.Streams;
using Windows.Graphics.Imaging;

Appelez OpenAsync pour obtenir un flux à partir du fichier image.Call OpenAsync to get a stream from the image file. Appelez BitmapDecoder.CreateAsync pour obtenir un décodeur d’image bitmap à partir du flux.Call BitmapDecoder.CreateAsync to get a bitmap decoder for the stream. Ensuite, appelez GetSoftwareBitmap pour obtenir une représentation SoftwareBitmap de l’image.Then, call GetSoftwareBitmap to get a SoftwareBitmap representation of the image.

IRandomAccessStream stream = await photo.OpenAsync(FileAccessMode.Read);
BitmapDecoder decoder = await BitmapDecoder.CreateAsync(stream);
SoftwareBitmap softwareBitmap = await decoder.GetSoftwareBitmapAsync();

Pour afficher l’image dans votre interface utilisateur, déclarez un contrôle Image dans votre page XAML.To display the image in your UI, declare an Image control in your XAML page.

<Image x:Name="imageControl" Width="200" Height="200"/>

Pour utiliser l’image bitmap logicielle dans votre page XAML, incluez l’espace de noms using Windows.UI.Xaml.Media.Imaging dans votre projet.To use the software bitmap in your XAML page, include the using Windows.UI.Xaml.Media.Imaging namespace in your project.

using Windows.UI.Xaml.Media.Imaging;

Le contrôle image nécessite que la source de l’image soit au format BGRA8 avec des caractères alpha prémultipliés ou sans alpha.The Image control requires that the image source be in BGRA8 format with premultiplied alpha or no alpha. Appelez la méthode statique SoftwareBitmap. Convert pour créer une nouvelle image bitmap de logiciel avec le format souhaité.Call the static method SoftwareBitmap.Convert to create a new software bitmap with the desired format. Ensuite, créez un nouvel objet SoftwareBitmapSource et appelez-le SetBitmapAsync pour affecter la bitmap logicielle à la source.Next, create a new SoftwareBitmapSource object and call it SetBitmapAsync to assign the software bitmap to the source. Enfin, définissez le contrôle Image et sa propriété Source pour afficher la photo capturée dans l’interface utilisateur.Finally, set the Image control's Source property to display the captured photo in the UI.

SoftwareBitmap softwareBitmapBGR8 = SoftwareBitmap.Convert(softwareBitmap,
        BitmapPixelFormat.Bgra8, 
        BitmapAlphaMode.Premultiplied);

SoftwareBitmapSource bitmapSource = new SoftwareBitmapSource();
await bitmapSource.SetBitmapAsync(softwareBitmapBGR8);

imageControl.Source = bitmapSource;

Capturer une vidéo avec CameraCaptureUICapture a video with CameraCaptureUI

Pour capturer une vidéo, créez un objet CameraCaptureUI.To capture a video, create a new CameraCaptureUI object. À l’aide de la propriété VideoSettings de l’objet, vous pouvez spécifier des propriétés pour la vidéo retournée, telles que le format de la vidéo.By using the object's VideoSettings property, you can specify properties for the returned video, such as the format of the video.

Appelez CaptureFileAsync et spécifiez Video pour capturer une vidéo.Call CaptureFileAsync and specify Video to capture a video. La méthode renvoie une instance StorageFile contenant la vidéo si la capture est réussie.The method returns a StorageFile instance containing the video if the capture is successful. Si vous annulez la capture, l’objet retourné a la valeur null.If you cancel the capture, the returned object is null.

CameraCaptureUI captureUI = new CameraCaptureUI();
captureUI.VideoSettings.Format = CameraCaptureUIVideoFormat.Mp4;

StorageFile videoFile = await captureUI.CaptureFileAsync(CameraCaptureUIMode.Video);

if (videoFile == null)
{
    // User cancelled photo capture
    return;
}

Ce que vous faites du fichier vidéo capturé dépend du scénario pour votre application.What you do with the captured video file depends on the scenario for your app. Le reste de cet article décrit comment créer rapidement une composition multimédia à partir d’une ou plusieurs vidéos capturées et l’afficher dans votre interface utilisateur.The rest of this article shows you how to quickly create a media composition from one or more captured videos and show it in your UI.

Tout d’abord, ajoutez un contrôle MediaPlayerElement dans lequel la composition vidéo s’affichera sur votre page XAML.First, add a MediaPlayerElement control in which the video composition will display on your XAML page.

<MediaPlayerElement x:Name="mediaPlayerElement" Width="320" Height="240" AreTransportControlsEnabled="True"/>

Lorsque le fichier vidéo est retourné par l’interface utilisateur de capture de l’appareil photo, créez un nouvel MediaSource en appelant CreateFromStorageFile .When the video file returns from the camera capture UI, create a new MediaSource by calling CreateFromStorageFile. Appelez la méthode Play de la valeur par défaut MediaPlayer associée au MediaPlayerElement pour lire la vidéo.Call the Play method of the default MediaPlayer associated with the MediaPlayerElement to play the video.

mediaPlayerElement.Source = MediaSource.CreateFromStorageFile(videoFile);
mediaPlayerElement.MediaPlayer.Play();