过去两天我一直在寻找一种使用 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 中使用我的相机而没有任何问题。