如何在Windows 8.1中捕获高分辨率视频并从中捕获照片.尝试时我有一个UI跳跃效果

asi*_*tis 5 c# windows-8 windows-runtime windows-8.1

我的相机捕捉应用程序我习惯使用在视图中实现的相机拍摄连续照片CaptureElement.当它持续捕捉照片时,UI来回移动似乎是一种跳跃效果.这是我面临的问题.

使用的代码如下

var cameras = await DeviceInformation.FindAllAsync(DeviceClass.VideoCapture);
MediaCaptureInitializationSettings settings=new MediaCaptureInitializationSettings { VideoDeviceId = cameras[0].Id, StreamingCaptureMode = StreamingCaptureMode.Video };
var_mediaCapture = new MediaCapture();
await _mediaCapture.InitializeAsync(settings);
if (null != videoCapture) videoCapture.Source = _mediaCapture;
            await _mediaCapture.StartPreviewAsync();
Run Code Online (Sandbox Code Playgroud)

设置高分辨率

int max = 0;
var resolutions = videoController.GetAvailableMediaStreamProperties(MediaStreamType.Photo);
            for (var i = 0; i < resolutions.Count; i++)
            {
                ImageEncodingProperties res = resolutions[i] as ImageEncodingProperties;
                if (null == res) continue;


                if (res.Width * res.Height < max)
                {
                    max = (int)(res.Width * res.Height);
                    _imageEncodingProperties = res;
                }
            }

     await videoController.SetMediaStreamPropertiesAsync(MediaStreamType.Photo, _imageEncodingProperties);
Run Code Online (Sandbox Code Playgroud)

并使用以下方式从视频帧中捕获照片

    using (var photoStream = new InMemoryRandomAccessStream())
                {                        
                    await _mediaCapture.CapturePhotoToStreamAsync(_imageEncodingProperties, photoStream);
                    await photoStream.FlushAsync(); 
                }
Run Code Online (Sandbox Code Playgroud)

我通过设置不同的视频分辨率测试捕获.

var videoController = _mediaCapture.VideoDeviceController;
Run Code Online (Sandbox Code Playgroud)

首先,我preview resolution [640x480]为videoController 设置默认值,捕获过程正在进行而没有任何问题.然后我通过High resolution [1200x800]在Surface平板电脑中进行设置来检查它,在这种情况下,相框会出现在视频控件上一会儿,并且每侧都有一些小的宽度.感觉就像在相机视图中的放大/缩小效果[后向前跳跃].

在Windows 8.1中为视频媒体元素视频控制器设置高分辨率时是否有人遇到此问题?如果有人能解释它的原因我会很棒的.

谢谢

编辑: 我分析了情况,发现了以下几点

有许多可用的分辨率640 x 360,1280x720,1280x800,640x480等

我发现这个问题根本不存在于宽高比为1.777778的分辨率下.rato小于1.777的所有其他决议都存在问题.

也就是说,640x360,1280x720分辨率不存在问题,其他两个具有跳跃效果.我认为最后两个分别为1.6和1.33.

此外,我default camera app通过设置1280x800分辨率检查并拍摄照片,在那里我看到窗口中的相机元素的两侧都有黑色边框.

结论:

问题在于纵横比.当我从可用的相机分辨率设置高分辨率[1280x800]时,不保持表面设备的纵横比[1366x768],以便图像试图适应屏幕并且用户感觉到跳跃效果.所以我设置了最高分辨率,它保持了设备的宽高比,即1280x720,问题解决了.

asi*_*tis 4

实际上,问题出在宽高比上。当我从可用的相机分辨率中设置高分辨率 [1280x800] 时,这不会保持 Surface 设备的宽高比 [1366x768],因此图像会尝试适应屏幕,并且用户会感受到跳跃效果。所以我设置了保持设备纵横比的最高分辨率,即1280x720,问题就解决了。