我正在使用 MediaCapture连同 CapturePreview在 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 屏幕上。
最佳答案
我最终找到的解决方案是这样的改变:
来自:
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
设置为与流相同的分辨率。无论如何,默认的 PhotoCaptureSource
是 Auto
,这一定是使用了 Photo
模式而不是 VideoPreview
。一旦我改变了这个,问题就不再出现了。
关于c# - 使用 MediaCapture 时纵横比/缩放级别发生变化的问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51072073/