gpt4 book ai didi

c# - 使用 MediaCapture 时纵横比/缩放级别发生变化的问题?

转载 作者:太空宇宙 更新时间:2023-11-03 14:52:55 25 4
gpt4 key购买 nike

我正在使用 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 设置为与流相同的分辨率。无论如何,默认的 PhotoCaptureSourceAuto,这一定是使用了 Photo 模式而不是 VideoPreview。一旦我改变了这个,问题就不再出现了。

关于c# - 使用 MediaCapture 时纵横比/缩放级别发生变化的问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51072073/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com