网络摄像头自动捕捉(Emgu.cv)c#



我有一个项目,当用户在登录表单中错误登录3次时,网络摄像头将自动开始捕捉。它成功地将图像保存在数据库中,但有一个错误,即对象引用未设置为对象的实例。我知道有很多问题和答案,但我仍然无法解决。另一个问题是,当我只是从网络摄像头窗体调试时,它运行得很好,没有错误消息,但当我从登录窗体调试时会出现错误。另一件事是它没有显示错误的线,但我确信它来自这里:

private void webcam_Load(object sender, EventArgs e)
{
if ((imagecapture == null))
{
try
{
imagecapture = new Emgu.CV.VideoCapture();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
Application.Idle += new EventHandler(loadimage);
}

这是loadimage((

public void loadimage(object sender, EventArgs e)
{
try
{
Emgu.CV.Mat imageviewer = this.imagecapture.QueryFrame();
pictureBox1.Image = imageviewer.Bitmap;
MemoryStream ms = new MemoryStream();
pictureBox1.Image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
byte[] picture = ms.ToArray();
connection.Open();
DateTime dtime = DateTime.Now;
string qry = "INSERT INTO WebcamPhoto (ImageData,DateAndTime)  VALUES(@ImageData,@dt)";
//Initialize SqlCommand object for insert.
SqlCommand cmd = new SqlCommand(qry, connection);
cmd.Parameters.AddWithValue("@ImageData", picture);
cmd.Parameters.AddWithValue("@dt", dtime);
cmd.ExecuteNonQuery();
connection.Close();
imagecapture.Dispose();
//Close form and return to list or images.
this.Close();
}
catch (NullReferenceException ex)
{
MessageBox.Show(ex.Message);
}
}

我已经尝试返回,错误消息已经消失,但即使网络摄像头正在工作,图像也没有保存在数据库中。

private void webcam_Load(object sender, EventArgs e)
{
if ((imagecapture == null))
{
try
{
imagecapture = new Emgu.CV.VideoCapture();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
return;
}
Application.Idle += new EventHandler(loadimage);
}

好吧,几天后我终于自己找到了答案。怎样我试着一行一行地改变我编写代码的方式,每次更改代码时都要测试它,最终我找到了罪魁祸首。所以罪魁祸首是:

public void loadimage(object sender, EventArgs e)
{
//my other code.....
imagecapture.Dispose(); <<<----here 
}

所以我把它改成

private void ReleaseData()
{
if (imagecapture !=null)
{
imagecapture.Dispose();
}
}

现在问题解决了:(

最新更新