Поделиться через


Получение кадра предварительного просмотра

В этом разделе показано, как получить один кадр предварительного просмотра из потока предварительного просмотра мультимедиа.

Примечание.

В этой статье рассматриваются основные понятия и код, описанные в разделе "Базовый" фото, видео и аудиозапись с помощью MediaCapture, в котором описаны шаги по реализации базового фото и видеозахвата. Рекомендуется ознакомиться с основным шаблоном захвата мультимедиа в этой статье, прежде чем перейти к более сложным сценариям захвата. В коде этой статьи предполагается, что приложение уже имеет экземпляр MediaCapture, который был правильно инициализирован, и что у вас есть CaptureElement с активным потоком предварительного просмотра видео.

Помимо пространств имен, необходимых для базового захвата мультимедиа, для записи кадра предварительного просмотра требуется следующее пространство имен.

using Windows.Media;

При запросе кадра предварительного просмотра можно указать формат, в котором вы хотите получить кадр, создав объект VideoFrame с нужным форматом. В этом примере создается видеокадр, который является тем же разрешением, что и поток предварительного просмотра, вызвав VideoDeviceController.GetMediaStreamProperties и указав MediaStreamType.VideoPreview, чтобы запросить свойства для потока предварительной версии. Для создания нового видеокадров используется ширина и высота потока предварительного просмотра.

// Get information about the preview
var previewProperties = _mediaCapture.VideoDeviceController.GetMediaStreamProperties(MediaStreamType.VideoPreview) as VideoEncodingProperties;

// Create a video frame in the desired format for the preview frame
VideoFrame videoFrame = new VideoFrame(BitmapPixelFormat.Bgra8, (int)previewProperties.Width, (int)previewProperties.Height);

Если объект MediaCapture инициализирован и у вас есть активный поток предварительной версии, вызовите GetPreviewFrameAsync, чтобы получить поток предварительной версии. Передайте видеокадр, созданный на последнем шаге, чтобы указать формат возвращаемого кадра.

VideoFrame previewFrame = await _mediaCapture.GetPreviewFrameAsync(videoFrame);

Получите представление программы SoftwareBitmap для предварительного просмотра кадра путем доступа к свойству SoftwareBitmap объекта VideoFrame. Сведения о сохранении, загрузке и изменении растровых карт программного обеспечения см. в разделе "Образы".

SoftwareBitmap previewBitmap = previewFrame.SoftwareBitmap;

Вы также можете получить представление кадра предварительного просмотра iDirect3DSurface , если вы хотите использовать изображение с API Direct3D.

var previewSurface = previewFrame.Direct3DSurface;

Внимание

Свойство SoftwareBitmap или свойство Direct3DSurface возвращаемого Кадра видео может иметь значение NULL в зависимости от способа вызова GetPreviewFrameAsync, а также в зависимости от устройства, на котором работает ваше приложение.

Приложение всегда должно проверять значение NULL, прежде чем пытаться работать с объектами, возвращаемыми свойствами SoftwareBitmap или Direct3DSurface .

Когда вы закончите использовать кадр предварительного просмотра, обязательно вызовите метод Close (проецируемый в Dispose в C#), чтобы освободить ресурсы, используемые кадром. Или используйте шаблон using , который автоматически удаляет объект.

previewFrame.Dispose();
previewFrame = null;