Запись фотографий и видео в классическом приложении с помощью встроенного пользовательского интерфейса камеры Windows

В этой статье описывается, как использовать класс CameraCaptureUI для записи фотографий или видео с помощью пользовательского интерфейса камеры, встроенного в Windows. Эта функция позволяет приложению получать фотографии или видео, захваченные пользователем, с несколькими строками кода.

Если вы хотите предоставить собственный пользовательский интерфейс камеры или если в вашем сценарии требуется более надежный, низкий уровень управления операцией захвата, то следует использовать класс MediaCapture и реализовать собственный интерфейс записи. Дополнительные сведения см. в разделе Основы фото-, видео- и аудиосъемки с использованием MediaCapture.

Использование класса CameraCaptureUI для записи фотографий

Создайте новый экземпляр CameraCaptureUI, передавая свойство AppWindow.Id окна приложения. Свойство PhotoSettings позволяет указать некоторые ограничения на захваченную фотографию, включая формат файла и максимальное разрешение и возможность пользовательского интерфейса обрезать фотографию после захвата. Свойство VideoSettings предоставляет аналогичные свойства для записи видео, например максимальное разрешение и длительность, а также возможность ли пользовательского интерфейса обрезать видео после его записи.

Вызовите CaptureFileAsync , чтобы запустить пользовательский интерфейс записи камеры асинхронно. Используйте одно из значений в CameraCaptureUIMode , чтобы указать, должен ли пользовательский интерфейс разрешать запись фотографий, запись видео или оба. После завершения CaptureFileAsync возвращается объект файла StorageFile , содержащий захваченную фотографию или видео. Если возвращенный объект имеет значение NULL, это означает, что пользователь отменил операцию записи или произошла ошибка.

В следующем примере показано, как запустить CameraCaptureUI для фотозахвата, указав формат изображения в формате PNG и отключив обрезку. В этом примере захваченная фотография устанавливается в качестве источника для элемента управления 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
}

Использование класса CameraCaptureUI для записи видео

В следующем примере показано, как запустить CameraCaptureUI для захвата видео, указав максимальное значение видео в качестве стандартного определения и отключения обрезки. В этом примере захваченная фотография устанавливается в качестве источника для элемента управления 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
}

Перемещение и переименование захваченных файлов мультимедиа

CameraCaptureUI создает случайные имена для захваченных файлов мультимедиа, поэтому вам может потребоваться переименовать и переместить захваченные файлы, чтобы обеспечить их упорядочение. В следующем примере перемещается и переименовывается захваченный файл.

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