C#中控制摄像头 (续)

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

 public void get()
    {
        AviCapture.SendMessage(this.lwndC, AviCapture.WM_CAP_GET_SEQUENCE_SETUP, AviCapture.SizeOf(Capparms), ref Capparms);
    }

 public void set()
    {
        AviCapture.SendMessage(this.lwndC, AviCapture.WM_CAP_SET_SEQUENCE_SETUP, AviCapture.SizeOf(Capparms), ref Capparms);
    }
用来获得和设置相关的参数
      最后,在主窗体类中,做如下调用
                video.get();    //
                video.Capparms.fYield = true;  //另起一个线程
                video.Capparms.fAbortLeftMouse = false;   //鼠标左键单击停止为false
                video.Capparms.fAbortRightMouse = false;  //鼠标右键单击停止为false
                video.set();
在这里还有强调一下,上面的这段函数要用在视频预览函数之后(也就是打开摄像头那个函数),否则是不起作用的。

P.S
      上次写的东西很混乱,两位大哥看了都说不明白写的啥,在此说声抱歉。水平阅历有限,对很多东西都不了解,想到哪里说哪里。



posted @ 2009-07-22 17:38  命运之子  阅读(1460)  评论(1编辑  收藏  举报