2014-01-08 51 views

回答

0

您可以使用此代碼。

DeviceInformationCollection videoCaptureDevices = await eviceInformation.FindAllAsync(DeviceClass.VideoCapture); 

如果videoCaptureDevices計數爲零,則沒有附加攝像頭。
並且如果攝像機數量是2,那麼將會有前面的&後面的攝像機。

如果使用videoCaptureDevices [0]初始化相機操作,那將使用前置攝像頭,如果使用videoCaptureDevices [1]則會成爲後置攝像頭。

1

使用的DeviceInformationCollection索引將不會是一個可靠的解決方案:

  1. 有時前置攝像頭將是指數在0和1,有時,它似乎幾次測試面2上之後,是種隨機。
  2. 用戶可以使用USB端口連接其他網絡攝像頭,因此您可能會收集超過2個物品,而沒有任何線索哪個相機是哪個索引。

有同樣的問題,你這是我如何解決它:

// Still need to find all webcams 
DeviceInformationCollection webcamList = await eviceInformation.FindAllAsync(DeviceClass.VideoCapture) 

// Then I do a query to find the front webcam 
DeviceInformation frontWebcam = (from webcam in webcamList 
    where webcam.EnclosureLocation != null 
    && webcam.EnclosureLocation.Panel == Windows.Devices.Enumeration.Panel.Front 
    select webcam).FirstOrDefault(); 

// Same for the back webcam 
DeviceInformation backWebcam = (from webcam in webcamList 
    where webcam.EnclosureLocation != null 
    && webcam.EnclosureLocation.Panel == Windows.Devices.Enumeration.Panel.Back 
    select webcam).FirstOrDefault(); 

在本例我用LINQ查詢,但它的工作原理與「webcamList」一個foreach相同。

只要看看每個DeviceInformation的.EnclosureLocation.Panel屬性,這是一個Windows.Devices.Enumeration.Panel枚舉。其餘的是obvius,Front爲前置攝像頭,Back爲後置攝像頭。

還要小心檢查。EnclosureLocation是否爲空,使用USB網絡攝像頭,大部分時間它似乎都是空的。

相關問題