如何获得真正的CaptureElement大小?

时间:2017-11-29 23:08:08

标签: c# xaml uwp

我使用CaptureElement来显示相机的输出。

根据用户调整窗口大小的方式,相机输出的左/右或上/下可能会出现黑色边框。

我希望获得相机输出的大小而不包括黑色边框。我已经尝试了CaptureElement所拥有的许多高度/宽度/尺寸字段,包括ActualWidthRenderSize.Width等,但它们都没有返回相机的实际宽度/高度。

如果黑色边框的宽度为100px,实际的相机输出宽度为300px,则宽度字段将返回2*100px+300px = 500px。它们都包括黑色边框。

如何仅获得实际相机显示的宽度和高度?

2 个答案:

答案 0 :(得分:1)

  

如何仅获得实际相机显示的宽度和高度?

您可以使用IMediaEncodingProperties界面获取相机预览流的宽度和高度,并使CaptureElement控件与流相同,甚至可以将流大小设置为{ {1}}。在这种情况下,您可能看不到黑色部分。例如:

CaptureElement

背后的代码

<CaptureElement x:Name="myCaptureElement"  />
<Button Click="Button_Click">Click me to see a preview</Button>

上面的代码段引用了Set format, resolution, and frame rate for MediaCapture,更多详情您也可以参考CameraResolution官方样本。

答案 1 :(得分:0)

我使用了Sunteen的答案来获得相机的分辨率。然后,我计算了相机分辨率和视频预览输出比。使用此信息,我可以计算视频输出的实际大小。

这是解决方案。

var props = (VideoEncodingProperties) _mediaCapture.VideoDeviceController
    .GetMediaStreamProperties(MediaStreamType.VideoPreview);

double cameraWidth = props.Width;
double cameraHeight = props.Height;

double previewOutputWidth = CameraPreview.ActualWidth;
double previewOutputHeight =  CameraPreview.ActualHeight;

double cameraRatio = cameraWidth / cameraHeight;
double previewOutputRatio = previewOutputWidth / previewOutputHeight;

double actualWidth = (cameraRatio <= previewOutputRatio) ? 
    previewOutputHeight * cameraRatio
    : previewOutputWidth;
double actualHeight = (cameraRatio <= previewOutputRatio) ? 
    previewOutputHeight
    : previewOutputWidth / cameraRatio;