最近两天我一直在寻找使用C#从网络摄像头中捕获图像的方法。我在C#方面相当新手,我不想使用外部第三方库,所以我找到了两种不错的方法,但都好像返回几乎相同的错误。我无法让它们中的任何一个工作,所以如果您能帮助我使其中任何一种运行或协助我找到替代方法,那就太好了。
所以我找到的第一种方法是使用Windows WIA。我找到了以下代码:
CommonDialogClass dialog = new CommonDialogClass();
Device camera = dialog.ShowSelectDevice(WiaDeviceType.CameraDeviceType, true, false);
// take the photo
Item item = camera.ExecuteCommand(CommandID.wiaCommandTakePicture);
ImageFile image = (ImageFile)item.Transfer(FormatID.wiaFormatJPEG);
// filename and saving
image.SaveFile("Test.jpg");
这段代码似乎正是我要找的,但我无法运行它,因为在第二行出现了以下错误:
Exception from HRESULT: 0x80210015
我发现的第二种方法是使用Avicap32.dll并使用以下示例:
http://www.timvw.be/wp-content/code/csharp/testavicap32.zip
但我现在在处理这段代码:
Image image = ((CaptureDevice)cboDevices.SelectedItem).Capture();
image.Save(@"c:\capture.png", ImageFormat.Png);
以下异常: NullReferenceException: 对象引用未设置为对象的实例。
我认为这两种解决方案都存在问题,因为它们无法找到我的相机,但是我可以在Skype中毫无问题地使用我的相机。