Capturer des photos et des vidéos dans une application de bureau avec l’interface utilisateur intégrée de la caméra Windows

Cet article explique comment utiliser la classe CameraCaptureUI pour capturer des photos ou des vidéos à l’aide de l’interface utilisateur de la caméra intégrée à Windows. Cette fonctionnalité permet à votre application d’obtenir une photo ou une vidéo capturée par l’utilisateur avec seulement quelques lignes de code.

Si vous souhaitez fournir votre propre interface utilisateur de caméra ou si votre scénario nécessite un contrôle plus robuste et de bas niveau de l’opération de capture, vous devez utiliser la classe MediaCapture et implémenter votre propre expérience de capture. Pour plus d’informations, consultez capture photo, vidéo et audio de base avec MediaCapture.

Utiliser la classe CameraCaptureUI pour capturer des photos

Créez une instance de CameraCaptureUI, en passant la propriété AppWindow.Id de votre fenêtre d’application. La propriété PhotoSettings vous permet de spécifier certaines contraintes sur la photo capturée, y compris le format de fichier et la résolution maximale et si l’interface utilisateur permet à l’utilisateur de rogner la photo après sa capture. La propriété VideoSettings fournit des propriétés similaires pour la capture vidéo, telles que la résolution et la durée maximales, et indique si l’interface utilisateur permet à l’utilisateur de découper la vidéo après sa capture.

Appelez CaptureFileAsync pour lancer l’interface utilisateur de capture de caméra de manière asynchrone. Utilisez l’une des valeurs de CameraCaptureUIMode pour spécifier si l’interface utilisateur doit autoriser la capture photo, la capture vidéo ou les deux. Une fois CaptureFileAsync terminé, il retourne un objet de fichier StorageFile contenant la photo ou la vidéo capturée. Si l’objet retourné est null, cela signifie que l’utilisateur a annulé l’opération de capture ou qu’une erreur s’est produite.

L’exemple suivant illustre le lancement de CameraCaptureUI pour la capture de photos, en spécifiant le format d’image en tant que PNG et en désactivant le rognage. Dans cet exemple, la photo capturée est définie comme source pour un contrôle Image .

var cameraCaptureUI = new CameraCaptureUI(this.AppWindow.Id);
cameraCaptureUI.PhotoSettings.Format = CameraCaptureUIPhotoFormat.Png;
cameraCaptureUI.PhotoSettings.AllowCropping = false;

// Capture a photo asynchronously
StorageFile photo = await cameraCaptureUI.CaptureFileAsync(CameraCaptureUIMode.Photo);

if (photo != null)
{
    // Photo capture was successful

    // Show the captured photo in a XAML Image control  
    using (IRandomAccessStream fileStream = await photo.OpenAsync(Windows.Storage.FileAccessMode.Read))
    {
        // Set the image source to the selected bitmap 
        BitmapImage bitmapImage = new BitmapImage();
        await bitmapImage.SetSourceAsync(fileStream);
        iCapturedImage.Source = bitmapImage;
    }
} else
{
    // Photo capture failed or was cancelled
}

Utiliser la classe CameraCaptureUI pour capturer des vidéos

L’exemple suivant illustre le lancement de CameraCaptureUI pour la capture vidéo, en spécifiant la vidéo maximale en tant que définition standard et en désactivant le découpage. Dans cet exemple, la photo capturée est définie comme source pour un contrôle MediaPlayerElement .

var cameraCaptureUI = new CameraCaptureUI(this.AppWindow.Id);
cameraCaptureUI.VideoSettings.MaxResolution = CameraCaptureUIMaxVideoResolution.StandardDefinition;
cameraCaptureUI.VideoSettings.AllowTrimming = true;
StorageFile videoFile = await cameraCaptureUI.CaptureFileAsync(CameraCaptureUIMode.Video);

if (videoFile != null)
{
    // Video capture was successful

    // Show the captured video in a MediaPlayerElement control
    mediaPlayerElement.Source = MediaSource.CreateFromStorageFile(videoFile);
    mediaPlayerElement.MediaPlayer.Play();
}
else
{
    // Video capture failed or was cancelled
}

Déplacer et renommer des fichiers multimédias capturés

CameraCaptureUI crée des noms aléatoires pour les fichiers multimédias capturés. Vous pouvez donc renommer et déplacer des fichiers capturés pour les organiser. L’exemple suivant déplace et renomme un fichier capturé.

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

if (photo != null)
{
    // Move and rename captured photo
    StorageFolder destinationFolder =
    await ApplicationData.Current.LocalFolder.CreateFolderAsync("ProfilePhotoFolder",
        CreationCollisionOption.OpenIfExists);

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