在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;      
            }  
        }


转载自:点击打开链接

C#WPF使用AForge类库操作USB摄像头拍照并保存

项目中用到 USB 摄像头,需要根据情况进行图像抓拍,查了半天资料,比较多的是使用 WPFMediaKit 和 AForge 。 但是由于项目要求不显示 USB 摄像头拍摄的画面,最终确定使用 AF...
  • luo_5458
  • luo_5458
  • 2017年07月05日 15:54
  • 1673

WPF Camera Capture Control

  • 2012年07月02日 17:33
  • 147KB
  • 下载

AForge.net 使用之录像拍照功能实现

AForge.net 使用之录像拍照功能实现
  • chenhongwu666
  • chenhongwu666
  • 2014年12月16日 20:36
  • 20505

wpf下利用aforge,wpfmediakit和wincap调用usb摄像头简单分析

搜了两天的wpf下usb开发,总结如下 aforge的核心就是在wpf调用winform的控件,利用System.Windows.Forms.Integration 包裹aforge控件。 ...
  • bornonew
  • bornonew
  • 2016年11月23日 11:20
  • 1830

WPF集成 AForge VideoSourcePlayer 摄像头不出图像的问题

可能需要 Window窗体设置: AllowsTransparency="False"
  • wyq1153
  • wyq1153
  • 2016年12月17日 19:57
  • 906

摄像头采集(WPF+AviCap+C#)

  • 2013年07月07日 09:39
  • 68KB
  • 下载

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

利用AForge.net控制摄像头拍照最方便的方法就是利用PictureBox显示摄像头画面,但在WPF中不能直接使用PictureBox。必须通过来提供交换功能。其解决方法如下: 1、按照常规...
  • zhendongzd
  • zhendongzd
  • 2015年07月08日 17:23
  • 1736

C#学习之 调用 AForge.NET框架启动摄像头抓拍

刚刚写完启动摄像头,趁热打铁。              这里就是很简单啦。将获取到的每一帧图像保存至本地即可。 -----------------------------获取每一帧图像 请注意...
  • HK_5788
  • HK_5788
  • 2015年10月22日 01:55
  • 2433

C#摄像头实现拍照功能的简单代码示例

作者: 转自:http://www.csharpwin.com/csharpspace/5956r7934.shtml 摘要:这里将介绍一个C#摄像头实现拍照功能的简单代码示例,代码虽然不短...
  • whw8007
  • whw8007
  • 2014年03月06日 19:49
  • 2095

WPF调用本地摄像头拍照并保存为图片

  • 2016年06月15日 17:51
  • 430KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:在WPF中使用AForge.net控制摄像头拍照
举报原因:
原因补充:

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