我使用CaptureElement
来显示相机的输出。
根据用户调整窗口大小的方式,相机输出的左/右或上/下可能会出现黑色边框。
我希望获得相机输出的大小而不包括黑色边框。我已经尝试了CaptureElement
所拥有的许多高度/宽度/尺寸字段,包括ActualWidth
,RenderSize.Width
等,但它们都没有返回相机的实际宽度/高度。
如果黑色边框的宽度为100px
,实际的相机输出宽度为300px
,则宽度字段将返回2*100px+300px = 500px
。它们都包括黑色边框。
如何仅获得实际相机显示的宽度和高度?
答案 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;