基于Aforge摄像头调用简单实例

2020-01-05 09:38:54丽君

    记录当前帧保存为图像

代码

程序主要代码:

添加引用 using AForge.Video.DirectShow;


 ///查找所有摄像头设备
 private void loadCameraList()
    {
    VideoCaptureDevice cameraDevices = 
    new FilterInfoCollection(FilterCategory.VideoInputDevice);
      if (cameraDevices.Count == 0)
      {
        capture_btn.Enabled = false;
        cameraId_cob.Enabled = false;
        preview_btn.Enabled = false;
        guide_lab.Text = noCameraDevice;
        cameraDevices = null;

      }else if(cameraDevices.Count == 1)
      {
        isSingleCamera = true;
        preview_btn.Enabled = false;
        guide_lab.Visible = false;
      }
      foreach (FilterInfo cameraDevice in cameraDevices)
      {
        cameraId_cob.Items.Add(cameraDevice.Name);
        cameraId_cob.SelectedIndex = 0;
      }
    }
 ///根据选中摄像头打开该摄像头并预览
 private VideoCaptureDevice cameraDevice;
 private void preview()
    {
      if (null != cameraDevice)
      {//在2个或以上摄像头进行切换时执行
        preview_player.SignalToStop();
        preview_player.WaitForStop();
      }
      cameraDevice = 
      new VideoCaptureDevice(cameraDevices[cameraId_cob.SelectedIndex].MonikerString);
      cameraDevice.DesiredFrameSize = new Size(320, 240);
      cameraDevice.DesiredFrameRate = 1;
      preview_player.VideoSource = cameraDevice;
      preview_player.Start();
    }
///记录当前帧保存为图像
private void takePhoto()
    {
      if (cameraDevice == null)
        return;
      Bitmap bitmap = preview_player.GetCurrentVideoFrame();
      string fullPath = Application.StartupPath + "";
      if (!Directory.Exists(fullPath))
        Directory.CreateDirectory(fullPath);
      string img = fullPath + "Aforge.jpg";
      bitmap.Save(img);
      guide_lab.Text = img;
      guide_lab.Visible = true;
    }

备注

1.关闭窗体时需要关闭控件:


private void aforgeForm_FormClosing(object sender, FormClosingEventArgs e)
  {
    preview_player.SignalToStop();
    preview_player.WaitForStop();
  }

2.调用preview_player.GetCurrentVideoFrame()方法提示没有该方法