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

我的相机拍摄应用程序用于使用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(); 

设置高分辨率

 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); 

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

  using (var photoStream = new InMemoryRandomAccessStream()) { await _mediaCapture.CapturePhotoToStreamAsync(_imageEncodingProperties, photoStream); await photoStream.FlushAsync(); } 

我通过设置不同的video分辨率测试捕获。

 var videoController = _mediaCapture.VideoDeviceController; 

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

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

谢谢

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

有许多可用的分辨率640 x 360,1280×720,1280×800,640×480等

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

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

另外我用default camera app检查并通过设置1280×800分辨率捕获照片,在那里我看到窗口中的相机元素的两侧都有黑色边框。

结论:

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

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