ShowTime_02_在NET平台上采集摄像头数据

来源:互联网 发布:微信封域名 编辑:程序博客网 时间:2024/06/05 07:31

ShowTime的开发中需要一个摄像头照相的功能,所以需要一个在.NET平台上的摄像头采集模块。我首先想到的是否使用DX中的DirectShow来做,但查了一下资料后,发现DX9虽然支持.net的托管版本,但其中唯独DirectShow没有相应的.net版本,在codeproject虽然有厉害的老外在.net上用C#重写了所有的directshow接口,然后导入import 相应的dll做成了directshow版本(那位老外真是让人佩服),但directshow操作还是比较麻烦。


在查MSDN时,我惊喜的发现WIN32的Mutimedia API中有一个capCreateCaptureWindow函数,该函数创建一个子窗口,通过该窗口显示摄像头视频。Greate!所以,以这个API为出发,我封装了一个.net的类Camera,通过将帧数据复制到剪贴版然后得到Image对象,大家可以在这个URL: http://download.csdn.net/source/404066(包括了测试程序)
下载使用DLL,这个类实时返回摄像头当前帧.net上的Image对象,对外提供很方便的.NET接口。


先介绍如何在你的程序中使用Camer类来采集摄像头视频:
1、在你的PC上安装摄像头和相应驱动程序(严正声明,请不要在没装摄像头的情况下,试图使用Camera类来采集摄像头视频 );
2、创建你的C# WINFORM程序,将我的Camer.dll加入你工程的引用;
 


3、创建Camera对象,调用Create方法打开摄像头;
4、通过FrameImage属性可以实时得到当前帧的Image对象;
5、若需要更改摄像头的参数设置,则调用ShowCameraConfig方法;


例子程序:

Image image;
        
public Form1()
        
{
            camera 
= new Camera();
            InitializeComponent();
            camera.UpdataFrameImage 
+= new EventHandler(DrawFrame);
        }

        
private void DrawFrame(object o, EventArgs e)
        
{
            image 
= camera.FrameImage;
            
if(image!=null)
            
{
                panel1.CreateGraphics().DrawImage(image, panel1.ClientRectangle,
                    
new Rectangle(new Point(00), image.Size), GraphicsUnit.Pixel);
            }

        }


        
private void button1_Click(object sender, EventArgs e)
        
{
            camera.Create(
10this);
        }


        
private void button2_Click(object sender, EventArgs e)
        
{
            camera.ShowCameraConfig();
        }

Camera类的UML结构图:


 
说明:frameSize返回当前视频采集的分辨率,Create方法打开摄像头进行采集,第一个参数指明更FrameImage的速度(单位:次/秒),UpdataFrameImage是对外开放的代理,在每次更新FrameImage的时候会触发该代理,ShowCameraConfig为显示摄像头参数设置对话框,Destroy为关闭摄像头释放资源。
这是我使用这个Camera类,来采集摄像头数据保存下的图片效果:
 

Camera类后期可能还要修改,等固定下来以后,我再把C#源代码都挂上

原创粉丝点击