Zachycení fotek a videa v desktopové aplikaci pomocí integrovaného uživatelského rozhraní fotoaparátu pro Windows

Tento článek popisuje, jak pomocí třídy CameraCaptureUI zachytit fotky nebo videa pomocí uživatelského rozhraní fotoaparátu integrovaného do Windows. Tato funkce umožňuje aplikaci získat fotku nebo video pořízené uživatelem pomocí několika řádků kódu.

Pokud chcete poskytnout vlastní uživatelské rozhraní fotoaparátu nebo pokud váš scénář vyžaduje robustnější řízení operace zachycení na nízké úrovni, měli byste použít třídu MediaCapture a implementovat vlastní prostředí pro zachycení. Další informace naleznete v tématu Základní fotka, video a zvukový záznam pomocí MediaCapture.

Použití třídy CameraCaptureUI k zachycení fotek

Vytvořte novou instanci CameraCaptureUI, která předává vlastnost AppWindow.Id okna aplikace. Vlastnost PhotoSettings umožňuje určit určitá omezení zachycené fotky, včetně formátu souboru a maximálního rozlišení a jestli uživatelské rozhraní umožňuje uživateli oříznout fotku po jeho zachycení. Vlastnost VideoSettings poskytuje podobné vlastnosti pro zachycení videa, jako je maximální rozlišení a doba trvání a jestli uživatelské rozhraní umožňuje uživateli po zachycení video oříznout.

Zavolejte CaptureFileAsync , aby se uživatelské rozhraní pro zachycení fotoaparátu spustilo asynchronně. Pomocí jedné z hodnot z CameraCaptureUIMode určete, jestli má uživatelské rozhraní povolit zachycení fotek, zachycení videa nebo obojí. Po dokončení funkce CaptureFileAsync vrátí objekt souboru StorageFile obsahující zachycenou fotku nebo video. Pokud vrácený objekt má hodnotu null, znamená to, že buď uživatel zrušil operaci zachycení, nebo došlo k chybě.

Následující příklad ukazuje spuštění CameraCaptureUI pro zachycení fotografií, určení formátu obrázku jako PNG a zakázání oříznutí. V tomto příkladu je zachycená fotka nastavena jako zdroj ovládacího prvku Obrázek .

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
}

Použití třídy CameraCaptureUI k zachycení videí

Následující příklad ukazuje spuštění CameraCaptureUI pro zachycení videa, určení maximálního videa jako standardní definice a zakázání oříznutí. V tomto příkladu je zachycená fotografie nastavena jako zdroj pro ovládací prvek 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
}

Přesunutí a přejmenování zachycených mediálních souborů

CameraCaptureUI vytváří náhodné názvy zachycených mediálních souborů, takže můžete chtít přejmenovat a přesunout zachycené soubory, aby byly uspořádané. Následující příklad přesune a přejmenuje zachycený soubor.

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