C#控制摄像头实例谈

使用VFW写的C#控制摄像头最大的问题就在于需要自己手动另起一个线程。(这里,我们定义一个叫AviCapture.cs的类,用于引入avicap32.dll以及相关的内容)在avicap32.dll中,CAPTUREPARMS结构里有一个fYield的东东,代表的意思是另起线程标志位,如果为真,则程序重新启动一个线程用于视频流的捕获,默认值是假。但是如果你是为了真,你必须要在程序中处理一些潜在的操作,因为当视频捕获时,其他操作并没有被屏蔽。。在AviCapture这个类的基础上定义一个叫Video的类,实现控制设想头的一些方法,如打开摄像头,关闭摄像头,开始录像,结束录像,拍照片等等。。。。在Video类中还要定义两个C#控制摄像头函数如下:

 
 
 
  1. publicvoidget()  
  2. {  
  3. AviCapture.SendMessage(this.lwndC,AviCapture.WM_CAP_GET_SEQUENCE_SETUP,AviCapture.SizeOf(Capparms),refCapparms);  
  4. }  
  5.  
  6. publicvoidset()  
  7. {  
  8. AviCapture.SendMessage(this.lwndC,AviCapture.WM_CAP_SET_SEQUENCE_SETUP,AviCapture.SizeOf(Capparms),refCapparms);  

用来获得和设置相关的C#控制摄像头参数

最后,在主窗体类中,做如下调用

 
 
 
  1. video.get();//  
  2. video.Capparms.fYield=true;//另起一个线程  
  3. video.Capparms.fAbortLeftMouse=false;//鼠标左键单击停止为false  
  4. video.Capparms.fAbortRightMouse=false;//鼠标右键单击停止为false  
  5. video.set(); 

在这里还有强调一下,上面的这段函数要用在视频预览函数之后(也就是打开摄像头那个函数),否则是不起作用的。

【编辑推荐】

  1. 如何用C#和ADO.NET访问
  2. 浅析C# Switch语句
  3. C#验证输入方法详解
  4. 简单介绍C# 匿名方法
  5. C# FileSystemWatcher对象
THE END