我的相机拍摄应用程序用于使用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);
使用
从视频帧中捕捉照片 using (var photoStream = new InMemoryRandomAccessStream())
{
await _mediaCapture.CapturePhotoToStreamAsync(_imageEncodingProperties, photoStream);
await photoStream.FlushAsync();
}
我通过设置不同的视频分辨率来测试捕获。
var videoController = _mediaCapture.VideoDeviceController;
首先,我为videoController设置默认preview resolution [640x480]
,捕获过程正在进行,没有任何问题。然后我通过在Surface平板电脑中设置High resolution [1200x800]
来检查它,在这种情况下,相框会出现在视频控件上一会儿,并且每侧都有一些小的宽度。感觉就像在相机视图中的放大/缩小效果[后向前跳跃]。
在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,问题解决了。
答案 0 :(得分:4)
实际上问题在于宽高比。当我设置高 分辨率[1280x800]来自可用的相机分辨率 没有保持表面设备的纵横比[1366x768],所以 Image正试图融入屏幕并感受到跳跃效果 由用户。所以我设置了保持最高分辨率的最高分辨率 设备纵横比,即1280x720,问题解决了。