如何在WinForms C#中检测窗口平板电脑中的前置和后置摄像头

本文关键字:摄像头 平板电脑 窗口 WinForms 检测 | 更新日期: 2023-09-27 18:33:56

我在winforms中使用aforge进行视频录制。我想在窗口平板电脑中录制视频(前置和后置摄像头)。我能够找到视频捕获设备的列表,但无法识别哪个是前置或后置摄像头。

我使用的命名空间:

using AForge.Video;
using AForge.Video.DirectShow;

我已经看到了我的发现视频捕获设备代码片段:

public VideoCaptureDevice cam = null;
public FilterInfoCollection usbCams;
...
usbCams = new FilterInfoCollection(FilterCategory.VideoInputDevice);
if (usbCams.Count == 1)
{
    cam = new VideoCaptureDevice(usbCams[0].MonikerString);
}
else if (usbCams.Count == 2)
{
    cam = new VideoCaptureDevice(usbCams[1].MonikerString);
}
cam.NewFrame += new NewFrameEventHandler(cam_NewFrame);
cam.Start();
...
private void cam_NewFrame(object sender, NewFrameEventArgs eventArgs)
{
    Bitmap bitmap = (Bitmap)eventArgs.Frame.Clone();
    ImgContainer.Image = bitmap;
}

我已经在不同的设备上进行了测试,例如iball和联想瑜伽8。我发现一个原因是在Iball平板电脑中返回第一个前置摄像头名称和第二个后置摄像头,但在联想平板电脑中返回第一个后置摄像头和第二个前置摄像头。我完全糊涂了。如何识别前后摄像头?

如何在WinForms C#中检测窗口平板电脑中的前置和后置摄像头

usbCams 是一个列表,其中包含您机器中所有可用的相机设备。有了这个:

if (usbCams.Count == 1)
{
    cam = new VideoCaptureDevice(usbCams[0].MonikerString);
}
else if (usbCams.Count == 2)
{
    cam = new VideoCaptureDevice(usbCams[1].MonikerString);
}
您正在做的是,如果只有一个设备使用

第一个,如果有两个设备使用第二个,但不确定第二个是后部还是前部。我在应用程序中所做的是使用选择器并填充所有可用设备,并让用户选择。像这样:

List<string> camaras = new List<string>();
foreach (FilterInfo item in usbCams)
{
    camaras.Add(item.Name);
}
comboBox.ItemsSource = camaras;

当组合框更改选择时

cam.Stop();
cam= new VideoCaptureDevice(LoaclWebCamsCollection[comboBox.SelectedIndex].MonikerString);
cam.NewFrame += new NewFrameEventHandler(cam_NewFrame);
cam.Start();

我现在没有足够的设备来测试凸轮的顺序,但可能是按名称设备或驱动程序安装优先级或其他方式排序。

黑客是检查功能并将最高分辨率的相机设置为后置摄像头。如果质量有差异,则后置摄像头通常是更好的。

这并不总是有效,例如Surface Pro 1有2个具有相同分辨率的相机。