就是普通的USB摄像头,现在要实现一个功能,像QQ一样,插入USB摄像头之后,能通过软件获取摄像头的视频数据。

解决方案 »

  1.   

    就是一般的usb摄像头,应该跟通信协议无关哦,想先了解一些这方面的知识
      

  2.   

        //
        //视频类
        //
        public class cVideo
        {
            private IntPtr lwndC;//保存无符号句柄
            private IntPtr mControlPtr;//保存管理指示器
            private int mWidth;
            private int mHeight;        /// <summary>
            /// 初始化视频函数
            /// </summary>
            /// <param name="handle">显示视频控件的句柄</param>
            /// <param name="width">视频宽度</param>
            /// <param name="height">视频高度</param>
            public cVideo(IntPtr handle, int width, int height)
            {
                mControlPtr = handle;//显示视频控件的句柄
                mWidth = width;//视频宽度
                mHeight = height;//视频高
            }
            /// <summary>
            /// 打开视频设备
            /// </summary>
            public void StartWebCam()
            {
                byte[] lpszName = new byte[100];
                byte[] lpszVer =new byte[100];
                VideoAPI.capGetDriverDescriptionA(0,lpszName,100,lpszVer,100);
                this.lwndC=VideoAPI.capCreateCaptureWindowA(lpszName,VideoAPI.WS_CHILD|VideoAPI.WS_VISIBLE,0,0,mWidth,mHeight,mControlPtr,0);
                if(VideoAPI.SendMessage(lwndC,VideoAPI.WM_CAP_DRIVER_CONNECT,0,0))
                {
                    VideoAPI.SendMessage(lwndC,VideoAPI.WM_CAP_SET_PREVIEWRATE,100,0);
                    VideoAPI.SendMessage(lwndC,VideoAPI.WM_CAP_SET_PREVIEW,true,0);
                }        }
            /// <summary>
            /// 关闭视频设备
            /// </summary>
            public void CloseWebCam()
            {
                VideoAPI.SendMessage(lwndC,VideoAPI.WM_CAP_DRIVER_DISCONNECT,0,0);
            }
            /// <summary>
            /// 拍照
            /// </summary>
            /// <param name="hWndC">窗口句柄</param>
            /// <param name="path">要保存bmp文件的路径</param>
            public void GetCamImage(IntPtr hWndC,string path)
            {
                IntPtr hBmp = Marshal.StringToHGlobalAnsi(path);
                VideoAPI.SendMessage(lwndC,VideoAPI.WM_CAP_SAVEDIB,0,hBmp.ToInt32());
            }
        }
      

  3.   

    可以用API实现!`以前做过一个项目里面有个directshow的方件,可以把视频设备列出来.
      

  4.   

    支持用API,以前做过用VB的。就是用API.网上的例子挺多。跟用什么语言关系不大。