我在c#中有一个程序,它使用我的本地网络摄像头来捕获和存储图像。我有按钮点击开始,停止,继续等等。当我运行程序时,它在我打开系统后第一次正常工作,但在连续执行相同的事情我得到一个错误(在弹出 - 窗口):
捕获视频图像时发生错误。视频捕获现在将终止。对象引用未设置为对象的实例。
我认为这可能是因为相机设备,而不是释放它使用的内存。那么当我点击退出按钮时,如何以编程方式释放它?下面是程序的一部分,我在webcam.start(0)方法中得到错误
命名空间WinFormCharpWebCam {
class WebCam
{
private WebCamCapture webcam;
private System.Windows.Forms.PictureBox _FrameImage;
private int FrameNumber = 30;
public void InitializeWebCam(ref System.Windows.Forms.PictureBox ImageControl)
{
webcam = new WebCamCapture();
webcam.FrameNumber = ((ulong)(0ul));
webcam.TimeToCapture_milliseconds = FrameNumber;
webcam.ImageCaptured += new WebCamCapture.WebCamEventHandler(webcam_ImageCaptured);
_FrameImage = ImageControl;
}
void webcam_ImageCaptured(object source, WebcamEventArgs e)
{
_FrameImage.Image = e.WebCamImage;
}
public void Start()
{
webcam.TimeToCapture_milliseconds = FrameNumber;
webcam.Start(0); //error pops up when the execution comes to this method
}
public void Stop()
{
webcam.Stop();
}
public void Continue()
{
// change the capture time frame
webcam.TimeToCapture_milliseconds = FrameNumber;
// resume the video capture from the stop
webcam.Start(this.webcam.FrameNumber);
}
public void ResolutionSetting()
{
webcam.Config();
}
public void AdvanceSetting()
{
webcam.Config2();
}
}
}
答案 0 :(得分:1)
您有NullReferenceException
投掷,而不是OutOfMemoryException
。
检查您的调用堆栈以确定其来源。您可以使用调试器设置调试您的应用程序,以便在抛出异常时中断,因此它会在发生异常的地方中断(按CRTL + D,E在VS.NET中打开异常窗口)。
答案 1 :(得分:1)
从你得到的错误中,我猜你下载了EasyWebCam库
如果这是正确的,那么这就是我如何解决它:
1.我在我的机器上安装了Cyberlink的Youcam软件
2.每当我启动自己的应用程序时,EasyWebCam库都会在机器上检测到Youcam WebSplitter,并提示我选择该驱动程序或默认网络摄像头驱动程序。
3.我选择了YouCam WebSplitter,该应用程序正常运行
此时,又出现了另一个障碍:当我的应用程序关闭时,Youcam进程不会终止
我是如何修理它的?
当我的应用程序窗口即将退出时,我必须得到Youcam进程并杀死它
这个丑陋的解决方案奏效了。