在WPF中使用AForge.net控制摄像头拍照

转载 2015年07月08日 17:23:00

利用AForge.net控制摄像头拍照最方便的方法就是利用PictureBox显示摄像头画面,但在WPF中不能直接使用PictureBox。必须通过<WindowsFormsHost></WindowsFormsHost>来提供交换功能。其解决方法如下:

1、按照常规方法新建一个WPF应用程序;

2、添加引用

WindowsFormsIntegration  (与WinForm交互的支持)

System.Windows.Forms (WinForm控件支持)

AForge.Video和AForge.Video.DirectShow(拷贝AForge.Video.dll,AForge.Video.DirectShow.dll,摄像头操作的库)

3、在XAML中添加  xmlns:wf="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"(用wf代替System.Windows.Forms,即可使用<wf:PictureBox/>添加PictureBox控件

4、在界面相应位置添加

<WindowsFormsHost Name="winForm">

  <wf:PictureBox Name="myPicture"/>

</WindowsFormsHost>(至此,界面层的设置完成)

5、代码部分

首先在窗口加载时初始化摄像头

 myPhoto = pictureHost.Child as System.Windows.Forms.PictureBox;
            FilterInfoCollection videoDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice);
            if (videoDevices.Count <= 0)
            {
                System.Windows.MessageBox.Show("请连接摄像头");
                return;
            }
            else
            {
                CloseCaptureDevice();

VideoCaptureDevice myCaptureDevice = null;
                myCaptureDevice = new VideoCaptureDevice(videoDevices[0].MonikerString);//myCaptureDevice的类型为      //VideoCaptureDevice,
                myCaptureDevice.NewFrame += new NewFrameEventHandler(myCaptureDevice_NewFrame);
                //myCaptureDevice.DesiredFrameSize = new System.Drawing.Size(436, 360);//436, 360
                //myCaptureDevice.DesiredFrameRate = 10;
                myCaptureDevice.Start();                
            }


//PictureBox myPhoto = pictureHost.Child as System.Windows.Forms.PictureBox;//获取界面中的myPicture控件

void myCaptureDevice_NewFrame(object sender, NewFrameEventArgs eventArgs)//帧处理程序
         {

  PictureBox myPhoto = myPicture;
         Bitmap bitmap = (Bitmap)eventArgs.Frame.Clone();
         myPhoto.Image = bitmap.Clone(
           new RectangleF((bitmap.Size.Width - 295) / 2, (bitmap.Size.Height - 413) / 2, 295, 413), //显示图像的宽度为295像素,高度为413像素
                System.Drawing.Imaging.PixelFormat.Format32bppRgb);
        }

关闭摄像头,释放系统资源(在窗口推出时必须调用)

 private void CloseCaptureDevice()
        {
            if (myCaptureDevice != null)
            {
                if (myCaptureDevice.IsRunning)
                {
                    myCaptureDevice.SignalToStop();                   
                }

       myCaptureDevice = null;
            }

   }


        /// <summary>  

        /// 截图 程序,没有实验,等待中……
        /// </summary>  
        private void Button3_Click(object sender, EventArgs e)  
        {  
            flag = 0;  
            videoSource.NewFrame += new NewFrameEventHandler(video_NewFrame);  
        }        
        private void video_NewFrame(object sender, NewFrameEventArgs eventArgs)  
        {  
            Bitmap bitmap = (Bitmap)eventArgs.Frame.Clone();  
            if (flag == 0)  
            {  
                string img = dirc + "/" + DateTime.Now.ToString("yyyyMMddhhmmss") + ".jpg";  
                bitmap.Save(img);  
                flag = 1;      
            }  
        }


转载自:点击打开链接

相关文章推荐

在WPF程序中使用摄像头兼谈如何使用AForge.NET控件

前言:AForge.NET 是用C#写的一个关于计算机视觉和人工智能领域的框架,它包括图像处理、神经网络、遗传算法和机器学习等。在C#程序中使用摄像头,我习惯性使用AForge.NET提供的类库。本文...
  • jhqin
  • jhqin
  • 2011-07-20 13:56
  • 13234

C# 利用AForge.NET 调用电脑摄像头进行拍照

当然了,你需要去官网下载类库,http://www.aforgenet.com/ 调用本机摄像头常用的组件:AForgeAForge.ControlsAForge.ImagingAForge.Vide...

c# 使用AForge.NET操作摄像头操作代码

根据网上的方法,运行程序摄像头出来了,但是怎么截图呢?找到一个显示图片方法如下 private void video_NewFrame(object sender, NewFrameEventArg...

C# 启动Windows摄像头类 使用Aforge.net

/// /// 启动摄像头类 需要引用using AForge.Video; using AForge.Video.DirectShow; /// public clas...

aforge.net摄像头监控的例子

  • 2016-05-21 15:27
  • 1.39MB
  • 下载

【AForge.Net】FFMPEG库的使用

转载自:http://www.cnblogs.com/bomo/archive/2013/03/10/2952765.html 【AForge.Net】FFMPEG库的使用 A...

C#AForge.NET调用摄像头

  • 2014-04-07 10:18
  • 590KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)