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

时间:2016-02-10 08:46:36

标签: c# winforms camera aforge front-camera

我在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和lenovo yoga 8等不同设备上进行了测试。我发现一个原因是在Iball平板电脑中返回第一个前置摄像头名称和第二个后置摄像头但是在联想平板电脑中返回第一个后置摄像头和第二个前置摄像头。我完全糊涂了。如何识别前后摄像头?

2 个答案:

答案 0 :(得分:0)

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

我现在没有足够的设备来测试凸轮的顺序,但可以通过名称设备或驱动程序安装优先级等来订购。

答案 1 :(得分:0)

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

这不会一直有效,例如Surface Pro 1有2个具有相同分辨率的相机。