Freigeben über


Aufnehmen von Fotos und Videos in einer Desktop-App mit der integrierten Windows-Kamera-UI

In diesem Artikel wird beschrieben, wie Sie die CameraCaptureUI-Klasse verwenden, um Fotos oder Videos mithilfe der in Windows integrierten Kamera-UI aufzunehmen. Mit diesem Feature kann Ihre App ein vom Benutzer aufgenommenes Foto oder Video mit nur wenigen Codezeilen abrufen.

Wenn Sie Eine eigene Kamera-UI bereitstellen oder für Ihr Szenario eine robustere Steuerung des Aufnahmevorgangs auf niedriger Ebene erforderlich ist, sollten Sie die MediaCapture-Klasse verwenden und Ihre eigene Aufnahmeerfahrung implementieren. Weitere Informationen finden Sie unter Grundlegende Foto-, Video- und Audioaufnahme mit MediaCapture.

Beachten Sie, dass die CameraCaptureUI-Klasse im Microsoft.Windows.Media.Capture-Namespace für UWP-Apps nicht unterstützt wird. Informationen zur Verwendung der UWP-Version dieses Features finden Sie unter Aufnehmen von Fotos und Videos in einer UWP-App mit der integrierten Windows-Kamera-UI

Verwenden der CameraCaptureUI-Klasse zum Aufnehmen von Fotos

Erstellen Sie eine neue Instanz von CameraCaptureUI, und übergeben Sie die AppWindow.Id-Eigenschaft Ihres App-Fensters. Mit der PhotoSettings-Eigenschaft können Sie einige Einschränkungen für das aufgenommene Foto angeben, einschließlich des Dateiformats und der maximalen Auflösung und ob der Benutzer das Foto nach der Aufnahme zuschneiden kann. Die VideoSettings-Eigenschaft stellt ähnliche Eigenschaften für die Videoaufnahme bereit, z. B. die maximale Auflösung und Dauer und ob der Benutzer das Video nach der Aufnahme kürzen kann.

Rufen Sie CaptureFileAsync auf, um die Kameraaufnahme-UI asynchron zu starten. Verwenden Sie einen der Werte aus "CameraCaptureUIMode ", um anzugeben, ob die Benutzeroberfläche Fotoaufnahmen, Videoaufnahmen oder beides zulassen soll. Wenn CaptureFileAsync abgeschlossen ist, wird ein StorageFile-Dateiobjekt zurückgegeben, das das aufgenommene Foto oder Video enthält. Wenn das zurückgegebene Objekt null ist, bedeutet dies, dass der Benutzer den Aufnahmevorgang abgebrochen hat oder ein Fehler aufgetreten ist.

Im folgenden Beispiel wird das Starten von CameraCaptureUI für die Fotoaufnahme veranschaulicht, das Bildformat als PNG angegeben und das Zuschneiden deaktiviert. In diesem Beispiel wird das aufgenommene Foto als Quelle für ein Bildsteuerelement festgelegt.

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
}

Verwenden der CameraCaptureUI-Klasse zum Aufnehmen von Videos

Im folgenden Beispiel wird das Starten von CameraCaptureUI für die Videoaufnahme veranschaulicht, wobei das maximale Video als Standarddefinition angegeben und die Kürzung deaktiviert wird. In diesem Beispiel wird das aufgenommene Foto als Quelle für ein MediaPlayerElement-Steuerelement festgelegt.

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
}

Verschieben und Umbenennen erfasster Mediendateien

Die CameraCaptureUI erstellt zufällige Namen für aufgenommene Mediendateien, sodass Sie erfasste Dateien umbenennen und verschieben möchten, um sie organisiert zu halten. Im folgenden Beispiel wird eine erfasste Datei verschoben und umbenannt.

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();
}