使用MediaCapture时,长宽比/缩放级别更改是否存在问题?

时间:2018-06-27 22:05:47

标签: c# wpf uwp windows-10

我正在使用MediaCaptureCapturePreview在Surface Pro平板电脑上创建预览流。我正在使用

使用计时器定期拍照
CapturePhotoToStreamAsync()

无论何时拍摄照片,预览流都会稍微缩小,就像它在改变分辨率或宽高比或类似内容一样。

我发现this issue听起来完全一样,但是无论设置哪种分辨率,我似乎都无法解决它。

这是我必须从流中获取Bitmap个对象的代码:

using (var randomAccessStream = new InMemoryRandomAccessStream())
{
    await mediaCap.CapturePhotoToStreamAsync(imageProps, randomAccessStream);

    randomAccessStream.Seek(0);
    using (var ioStream = randomAccessStream.AsStream())
    {
        BitmapImage bitmapImage = new BitmapImage();
        bitmapImage.BeginInit();
        bitmapImage.StreamSource = ioStream;
        bitmapImage.CacheOption = BitmapCacheOption.OnLoad;
        bitmapImage.EndInit();
        bitmapImage.Freeze();
    }
}

imageProps设置为1280x720,与预览对象的分辨率相同。如果它只是偶尔发生,这将不是一个大问题,但是我需要频繁地抓取帧(每秒多次),并且看起来非常刺耳。

编辑:

需要注意的是,该问题仅发生在提到的Surface Pro平板电脑(2736x1824 @ 200%)上,而似乎没有出现在1920x1080屏幕上。

1 个答案:

答案 0 :(得分:0)

我最终找到的解决方案是此更改:

发件人:

await _mediaCaptureObject.InitializeAsync(new MediaCaptureInitializationSettings
{
    VideoDeviceId = deviceList?.FirstOrDefault(x => x.Name.Contains("Camera Name"))?.Id,
    StreamingCaptureMode = StreamingCaptureMode.Video
});

收件人:

await _mediaCaptureObject.InitializeAsync(new MediaCaptureInitializationSettings
{
    VideoDeviceId = deviceList?.FirstOrDefault(x => x.Name.Contains("Camera Name"))?.Id,
    StreamingCaptureMode = StreamingCaptureMode.Video,
    PhotoCaptureSource = PhotoCaptureSource.VideoPreview
});

这并不能真正解释我所遇到的问题,因为在拍摄照片时我将ImageEncodingProperties设置为与流相同的分辨率。无论如何,默认的PhotoCaptureSourceAuto,它必须一直在使用Photo模式而不是VideoPreview。更改此设置后,问题就不再出现。