Dela via


Ta foton och video i en skrivbordsapp med det inbyggda kameragränssnittet i Windows

Den här artikeln beskriver hur du använder klassen CameraCaptureUI för att ta foton eller videor med hjälp av kameragränssnittet som är inbyggt i Windows. Med den här funktionen kan din app hämta ett användaranpassat foto eller en video med bara några rader kod.

Om du vill tillhandahålla ett eget kameragränssnitt, eller om ditt scenario kräver mer robust kontroll på låg nivå av avbildningsåtgärden, bör du använda klassen MediaCapture och implementera din egen avbildningsupplevelse. Mer information finns i Grundläggande foto, video och ljudinspelning med MediaCapture.

Observera att klassen CameraCaptureUI i namnområdet Microsoft.Windows.Media.Capture inte stöds för UWP-appar. Information om hur du använder UWP-versionen av den här funktionen finns i Avbilda foton och video i en UWP-app med windows inbyggda kameragränssnitt

Använda klassen CameraCaptureUI för att ta foton

Skapa en ny instans av CameraCaptureUI och skicka in egenskapen AppWindow.Id i appfönstret. Med egenskapen PhotoSettings kan du ange vissa begränsningar för det insamlade fotot, inklusive filformatet och maximal upplösning och om användargränssnittet tillåter användaren att beskära fotot när det har avbildats. Egenskapen VideoSettings innehåller liknande egenskaper för videoinspelning, till exempel maximal upplösning och varaktighet och om användargränssnittet tillåter att användaren trimmar videon efter att den har fångats.

Anropa CaptureFileAsync för att starta kamerainspelningsgränssnittet asynkront. Använd ett av värdena från CameraCaptureUIMode för att ange om användargränssnittet ska tillåta fotografering, videoinspelning eller båda. När CaptureFileAsync har slutförts returneras ett StorageFile-filobjekt som innehåller det insamlade fotot eller videon. Om det returnerade objektet är null innebär det att användaren avbröt avbildningsåtgärden eller att ett fel uppstod.

I följande exempel visas hur du startar CameraCaptureUI för fotografering, anger bildformatet som PNG och inaktiverar beskärning. I det här exemplet anges det insamlade fotot som källa för en bildkontroll .

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
}

Använda klassen CameraCaptureUI för att samla in videor

I följande exempel visas hur du startar CameraCaptureUI för videoinspelning, anger maximal video som standarddefinition och inaktiverar trimning. I det här exemplet anges det insamlade fotot som källa för en MediaPlayerElement-kontroll .

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
}

Flytta och byt namn på insamlade mediefiler

CameraCaptureUI skapar slumpmässiga namn för insamlade mediefiler, så du kanske vill byta namn på och flytta insamlade filer för att hålla dem organiserade. I följande exempel flyttas och byter namn på en insamlad fil.

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