(转)连接摄像头(vb)

Imports   System  
  Imports   System.Runtime.InteropServices  
  Imports   System.Drawing  
  Imports   System.Drawing.Imaging  
   
  Public   Class   Cam  
   
          Private   Const   WM_USER   As   Integer   =   &H400  
          Private   Const   WS_CHILD   As   Integer   =   &H40000000  
          Private   Const   WS_VISIBLE   As   Integer   =   &H10000000  
          Private   Const   WM_CAP_START   As   Integer   =   WM_USER  
          Private   Const   WM_CAP_STOP   As   Integer   =   WM_CAP_START   +   68  
          Private   Const   WM_CAP_DRIVER_CONNECT   As   Integer   =   WM_CAP_START   +   10  
          Private   Const   WM_CAP_DRIVER_DISCONNECT   As   Integer   =   WM_CAP_START   +   11  
          Private   Const   WM_CAP_SAVEDIB   As   Integer   =   WM_CAP_START   +   25  
          Private   Const   WM_CAP_GRAB_FRAME   As   Integer   =   WM_CAP_START   +   60  
          Private   Const   WM_CAP_SEQUENCE   As   Integer   =   WM_CAP_START   +   62  
          Private   Const   WM_CAP_FILE_SET_CAPTURE_FILEA   As   Integer   =   WM_CAP_START   +   20  
          Private   Const   WM_CAP_SEQUENCE_NOFILE   As   Integer   =   WM_CAP_START   +   63  
          Private   Const   WM_CAP_SET_OVERLAY   As   Integer   =   WM_CAP_START   +   51  
          Private   Const   WM_CAP_SET_PREVIEW   As   Integer   =   WM_CAP_START   +   50  
          Private   Const   WM_CAP_SET_CALLBACK_VIDEOSTREAM   As   Integer   =   WM_CAP_START   +   6  
          Private   Const   WM_CAP_SET_CALLBACK_ERROR   As   Integer   =   WM_CAP_START   +   2  
          Private   Const   WM_CAP_SET_CALLBACK_STATUSA   As   Integer   =   WM_CAP_START   +   3  
          Private   Const   WM_CAP_SET_CALLBACK_FRAME   As   Integer   =   WM_CAP_START   +   5  
          Private   Const   WM_CAP_SET_SCALE   As   Integer   =   WM_CAP_START   +   53  
          Private   Const   WM_CAP_SET_PREVIEWRATE   As   Integer   =   WM_CAP_START   +   52  
   
          Public   Const   WM_CAP_GET_CAPSTREAMPTR   =   WM_CAP_START   +   1  
   
          Public   Const   WM_CAP_SET_CALLBACK_STATUS   =   WM_CAP_START   +   3  
          Public   Const   WM_CAP_SET_CALLBACK_YIELD   =   WM_CAP_START   +   4  
          Public   Const   WM_CAP_SET_CALLBACK_WAVESTREAM   =   WM_CAP_START   +   7  
          Public   Const   WM_CAP_GET_USER_DATA   =   WM_CAP_START   +   8  
          Public   Const   WM_CAP_SET_USER_DATA   =   WM_CAP_START   +   9  
   
          Public   Const   WM_CAP_DRIVER_GET_NAME   =   WM_CAP_START   +   12  
          Public   Const   WM_CAP_DRIVER_GET_VERSION   =   WM_CAP_START   +   13  
          Public   Const   WM_CAP_DRIVER_GET_CAPS   =   WM_CAP_START   +   14  
   
          Public   Const   WM_CAP_FILE_SET_CAPTURE_FILE   =   WM_CAP_START   +   20  
          Public   Const   WM_CAP_FILE_GET_CAPTURE_FILE   =   WM_CAP_START   +   21  
          Public   Const   WM_CAP_FILE_ALLOCATE   =   WM_CAP_START   +   22  
          Public   Const   WM_CAP_FILE_SAVEAS   =   WM_CAP_START   +   23  
          Public   Const   WM_CAP_FILE_SET_INFOCHUNK   =   WM_CAP_START   +   24  
          Public   Const   WM_CAP_FILE_SAVEDIB   =   WM_CAP_START   +   25  
   
          Public   Const   WM_CAP_EDIT_COPY   =   WM_CAP_START   +   30  
   
          Public   Const   WM_CAP_SET_AUDIOFORMAT   =   WM_CAP_START   +   35  
          Public   Const   WM_CAP_GET_AUDIOFORMAT   =   WM_CAP_START   +   36  
   
          Public   Const   WM_CAP_DLG_VIDEOFORMAT   =   WM_CAP_START   +   41  
          Public   Const   WM_CAP_DLG_VIDEOSOURCE   =   WM_CAP_START   +   42  
          Public   Const   WM_CAP_DLG_VIDEODISPLAY   =   WM_CAP_START   +   43  
          Public   Const   WM_CAP_GET_VIDEOFORMAT   =   WM_CAP_START   +   44  
          Public   Const   WM_CAP_SET_VIDEOFORMAT   =   WM_CAP_START   +   45  
          Public   Const   WM_CAP_DLG_VIDEOCOMPRESSION   =   WM_CAP_START   +   46  
   
          Public   Const   WM_CAP_GET_STATUS   =   WM_CAP_START   +   54  
          Public   Const   WM_CAP_SET_SCROLL   =   WM_CAP_START   +   55  
   
          Public   Const   WM_CAP_GRAB_FRAME_NOSTOP   =   WM_CAP_START   +   61  
   
          Public   Const   WM_CAP_SET_SEQUENCE_SETUP   =   WM_CAP_START   +   64  
          Public   Const   WM_CAP_GET_SEQUENCE_SETUP   =   WM_CAP_START   +   65  
          Public   Const   WM_CAP_SET_MCI_DEVICE   =   WM_CAP_START   +   66  
          Public   Const   WM_CAP_GET_MCI_DEVICE   =   WM_CAP_START   +   67  
          Public   Const   WM_CAP_ABORT   =   WM_CAP_START   +   69  
   
          Public   Const   WM_CAP_SINGLE_FRAME_OPEN   =   WM_CAP_START   +   70  
          Public   Const   WM_CAP_SINGLE_FRAME_CLOSE   =   WM_CAP_START   +   71  
          Public   Const   WM_CAP_SINGLE_FRAME   =   WM_CAP_START   +   72  
   
          Public   Const   WM_CAP_PAL_OPEN   =   WM_CAP_START   +   80  
          Public   Const   WM_CAP_PAL_SAVE   =   WM_CAP_START   +   81  
          Public   Const   WM_CAP_PAL_PASTE   =   WM_CAP_START   +   82  
          Public   Const   WM_CAP_PAL_AUTOCREATE   =   WM_CAP_START   +   83  
          Public   Const   WM_CAP_PAL_MANUALCREATE   =   WM_CAP_START   +   84  
   
          '//   Following   added   post   VFW   1.1  
          Public   Const   WM_CAP_SET_CALLBACK_CAPCONTROL   =   WM_CAP_START   +   85  
   
          '//   Defines   end   of   the   message   range  
          Public   Const   WM_CAP_END   =   WM_CAP_SET_CALLBACK_CAPCONTROL  
   
          Private   hWndC   As   IntPtr  
          Private   bStat   As   Boolean   =   False  
   
          Private   mControlPtr   As   IntPtr  
          Private   mWidth   As   Integer  
          Private   mHeight   As   Integer  
          Private   mLeft   As   Integer  
          Private   mTop   As   Integer  
   
          <DllImport("avicap32.dll")>   _  
          Private   Shared   Function   capCreateCaptureWindowA(ByVal   lpszWindowName()   As   Byte,   ByVal   dwStyle   As   Integer,   ByVal   x   As   Integer,   ByVal   y   As   Integer,   ByVal   nWidth   As   Integer,   ByVal   nHeight   As   Integer,   ByVal   hWndParent   As   IntPtr,   ByVal   nID   As   Integer)   As   IntPtr  
          End   Function  
   
          <DllImport("avicap32.dll")>   _  
          Private   Shared   Function   capGetVideoFormat(ByVal   hWnd   As   IntPtr,   ByVal   psVideoFormat   As   IntPtr,   ByVal   wSize   As   Integer)   As   Integer  
          End   Function  
   
          <DllImport("User32.dll")>   _  
          Private   Shared   Function   SendMessage(ByVal   hWnd   As   IntPtr,   ByVal   wMsg   As   Integer,   ByVal   wParam   As   Integer,   ByVal   lParam   As   Long)   As   Boolean  
          End   Function  
   
          Function   capDlgVideoFormat()   As   Boolean  
                  capDlgVideoFormat   =   SendMessage(hWndC,   WM_CAP_DLG_VIDEOFORMAT,   0,   0)  
          End   Function  
          Function   capDlgVideoSource()   As   Boolean  
                  capDlgVideoSource   =   SendMessage(hWndC,   WM_CAP_DLG_VIDEOSOURCE,   0,   0)  
          End   Function  
          Function   capDlgVideoDisplay()   As   Boolean  
                  capDlgVideoDisplay   =   SendMessage(hWndC,   WM_CAP_DLG_VIDEODISPLAY,   0,   0)  
          End   Function  
          Function   capDlgVideoCompression()   As   Boolean  
                  capDlgVideoCompression   =   SendMessage(hWndC,   WM_CAP_DLG_VIDEOCOMPRESSION,   0,   0)  
          End   Function   

'///   <summary>  
          '///   初始化摄像头  
          '///   </summary>  
          '///   <param   name="handle">控件的句柄</param>  
          '///   <param   name="left">开始显示的左边距</param>  
          '///   <param   name="top">开始显示的上边距</param>  
          '///   <param   name="width">要显示的宽度</param>  
          '///   <param   name="height">要显示的长度</param>  
          Public   Sub   New(ByVal   handle   As   IntPtr,   ByVal   left   As   Integer,   ByVal   top   As   Integer,   ByVal   width   As   Integer,   ByVal   height   As   Integer)  
                  mControlPtr   =   handle  
                  mWidth   =   width  
                  mHeight   =   height  
                  mLeft   =   left  
                  mTop   =   top  
          End   Sub  
   
          '///   <summary>  
          '///   开始显示图像  
          '///   </summary>  
          Public   Sub   Start()  
                  If   bStat   Then  
                          Return  
                  End   If  
                  bStat   =   True  
                  Dim   lpszName(99)   As   Byte  
   
                  hWndC   =   capCreateCaptureWindowA(lpszName,   WS_CHILD   Or   WS_VISIBLE,   mLeft,   mTop,   mWidth,   mHeight,   mControlPtr,   0)  
   
                  If   hWndC.ToInt32()   <>   0   Then  
                          SendMessage(hWndC,   WM_CAP_SET_CALLBACK_VIDEOSTREAM,   0,   0)  
                          SendMessage(hWndC,   WM_CAP_SET_CALLBACK_ERROR,   0,   0)  
                          SendMessage(hWndC,   WM_CAP_SET_CALLBACK_STATUSA,   0,   0)  
                          SendMessage(hWndC,   WM_CAP_DRIVER_CONNECT,   0,   0)  
                          SendMessage(hWndC,   WM_CAP_SET_SCALE,   1,   0)  
                          SendMessage(hWndC,   WM_CAP_SET_PREVIEWRATE,   66,   0)  
                          SendMessage(hWndC,   WM_CAP_SET_OVERLAY,   1,   0)  
                          SendMessage(hWndC,   WM_CAP_SET_PREVIEW,   1,   0)  
                  End   If  
   
                  Return  
          End   Sub  
   
          '///   <summary>  
          '///   停止显示  
          '///   </summary>  
          Public   Sub   [Stop]()  
                  SendMessage(hWndC,   WM_CAP_DRIVER_DISCONNECT,   0,   0)  
                  bStat   =   False  
          End   Sub  
   
          '///   <summary>  
          '///   抓图  
          '///   </summary>  
          '///   <param   name="path">要保存bmp文件的路径</param>  
          Public   Sub   GrabImage(ByVal   path   As   String)  
                  Dim   hBmp   As   IntPtr   =   Marshal.StringToHGlobalAnsi(path)  
                  SendMessage(hWndC,   WM_CAP_SAVEDIB,   0,   hBmp.ToInt64())  
          End   Sub  
   
          '///   <summary>  
          '///   录像  
          '///   </summary>  
          '///   <param   name="path">要保存avi文件的路径</param>  
          Public   Sub   Kinescope(ByVal   path   As   String)  
                  Dim   hBmp   As   IntPtr   =   Marshal.StringToHGlobalAnsi(path)  
                  SendMessage(hWndC,   WM_CAP_FILE_SET_CAPTURE_FILEA,   0,   hBmp.ToInt64())  
                  SendMessage(hWndC,   WM_CAP_SEQUENCE,   0,   0)  
          End   Sub  
   
          '///   <summary>  
          '///   停止录像  
          '///   </summary>  
          Public   Sub   StopKinescope()  
                  SendMessage(hWndC,   WM_CAP_STOP,   0,   0)  
          End   Sub  
  End   Class   
下面这个是测试窗体Form1.vb:  
   
  Public   Class   Form1  
          Inherits   System.Windows.Forms.Form  
   
          Private   cccap   As   Cam  
  #Region   "   Windows   窗体设计器生成的代码   "  
   
          Public   Sub   New()  
                  MyBase.New()  
   
                  '该调用是   Windows   窗体设计器所必需的。  
                  InitializeComponent()  
   
                  '在   InitializeComponent()   调用之后添加任何初始化  
   
          End   Sub  
   
          '窗体重写   dispose   以清理组件列表。  
          Protected   Overloads   Overrides   Sub   Dispose(ByVal   disposing   As   Boolean)  
                  If   disposing   Then  
                          If   Not   (components   Is   Nothing)   Then  
                                  components.Dispose()  
                          End   If  
                  End   If  
                  MyBase.Dispose(disposing)  
          End   Sub  
   
          'Windows   窗体设计器所必需的  
          Private   components   As   System.ComponentModel.IContainer  
   
          '注意:   以下过程是   Windows   窗体设计器所必需的  
          '可以使用   Windows   窗体设计器修改此过程。  
          '不要使用代码编辑器修改它。  
          Friend   WithEvents   Button1   As   System.Windows.Forms.Button  
          Friend   WithEvents   picView   As   System.Windows.Forms.PictureBox  
          Friend   WithEvents   Button2   As   System.Windows.Forms.Button  
          Friend   WithEvents   Button3   As   System.Windows.Forms.Button  
          Friend   WithEvents   Button4   As   System.Windows.Forms.Button  
          Friend   WithEvents   Button5   As   System.Windows.Forms.Button  
          <System.Diagnostics.DebuggerStepThrough()>   Private   Sub   InitializeComponent()  
                  Me.picView   =   New   System.Windows.Forms.PictureBox  
                  Me.Button1   =   New   System.Windows.Forms.Button  
                  Me.Button2   =   New   System.Windows.Forms.Button  
                  Me.Button3   =   New   System.Windows.Forms.Button  
                  Me.Button4   =   New   System.Windows.Forms.Button  
                  Me.Button5   =   New   System.Windows.Forms.Button  
                  Me.SuspendLayout()  
                  '  
                  'picView  
                  '  
                  Me.picView.Anchor   =   CType((((System.Windows.Forms.AnchorStyles.Top   Or   System.Windows.Forms.AnchorStyles.Bottom)   _  
                                          Or   System.Windows.Forms.AnchorStyles.Left)   _  
                                          Or   System.Windows.Forms.AnchorStyles.Right),   System.Windows.Forms.AnchorStyles)  
                  Me.picView.Location   =   New   System.Drawing.Point(16,   16)  
                  Me.picView.Name   =   "picView"  
                  Me.picView.Size   =   New   System.Drawing.Size(640,   480)  
                  Me.picView.TabIndex   =   0  
                  Me.picView.TabStop   =   False  
                  '  
                  'Button1  
                  '  
                  Me.Button1.Anchor   =   CType((System.Windows.Forms.AnchorStyles.Bottom   Or   System.Windows.Forms.AnchorStyles.Left),   System.Windows.Forms.AnchorStyles)  
                  Me.Button1.Location   =   New   System.Drawing.Point(244,   540)  
                  Me.Button1.Name   =   "Button1"  
                  Me.Button1.Size   =   New   System.Drawing.Size(56,   24)  
                  Me.Button1.TabIndex   =   1  
                  Me.Button1.Text   =   "start"  
                  '  
                  'Button2  
                  '  
                  Me.Button2.Anchor   =   CType((System.Windows.Forms.AnchorStyles.Bottom   Or   System.Windows.Forms.AnchorStyles.Left),   System.Windows.Forms.AnchorStyles)  
                  Me.Button2.Location   =   New   System.Drawing.Point(304,   540)  
                  Me.Button2.Name   =   "Button2"  
                  Me.Button2.Size   =   New   System.Drawing.Size(56,   24)  
                  Me.Button2.TabIndex   =   1  
                  Me.Button2.Text   =   "stop"  
                  '  
                  'Button3  
                  '  
                  Me.Button3.Anchor   =   CType((System.Windows.Forms.AnchorStyles.Bottom   Or   System.Windows.Forms.AnchorStyles.Left),   System.Windows.Forms.AnchorStyles)  
                  Me.Button3.Location   =   New   System.Drawing.Point(380,   540)  
                  Me.Button3.Name   =   "Button3"  
                  Me.Button3.Size   =   New   System.Drawing.Size(56,   24)  
                  Me.Button3.TabIndex   =   1  
                  Me.Button3.Text   =   "cap"  
                  '  
                  'Button4  
                  '  
                  Me.Button4.Anchor   =   CType((System.Windows.Forms.AnchorStyles.Bottom   Or   System.Windows.Forms.AnchorStyles.Left),   System.Windows.Forms.AnchorStyles)  
                  Me.Button4.Location   =   New   System.Drawing.Point(352,   508)  
                  Me.Button4.Name   =   "Button4"  
                  Me.Button4.Size   =   New   System.Drawing.Size(124,   24)  
                  Me.Button4.TabIndex   =   1  
                  Me.Button4.Text   =   "色彩校正"  
                  '  
                  'Button5  
                  '  
                  Me.Button5.Anchor   =   CType((System.Windows.Forms.AnchorStyles.Bottom   Or   System.Windows.Forms.AnchorStyles.Left),   System.Windows.Forms.AnchorStyles)  
                  Me.Button5.Location   =   New   System.Drawing.Point(164,   512)  
                  Me.Button5.Name   =   "Button5"  
                  Me.Button5.Size   =   New   System.Drawing.Size(124,   24)  
                  Me.Button5.TabIndex   =   1  
                  Me.Button5.Text   =   "画面大小"  
                  '  
                  'Form1  
                  '  
                  Me.AutoScaleBaseSize   =   New   System.Drawing.Size(6,   14)  
                  Me.ClientSize   =   New   System.Drawing.Size(792,   573)  
                  Me.Controls.Add(Me.Button1)  
                  Me.Controls.Add(Me.picView)  
                  Me.Controls.Add(Me.Button2)  
                  Me.Controls.Add(Me.Button3)  
                  Me.Controls.Add(Me.Button4)  
                  Me.Controls.Add(Me.Button5)  
                  Me.Name   =   "Form1"  
                  Me.Text   =   "Form1"  
                  Me.ResumeLayout(False)  
   
          End   Sub  
   
  #End   Region  
   
          Private   Sub   Form1_Load(ByVal   sender   As   System.Object,   ByVal   e   As   System.EventArgs)   Handles   MyBase.Load  
                  cccap   =   New   Cam(picView.Handle,   0,   0,   picView.Width,   picView.Height)  
          End   Sub  
   
          Private   Sub   Button1_Click(ByVal   sender   As   System.Object,   ByVal   e   As   System.EventArgs)   Handles   Button1.Click  
                  cccap.Start()  
          End   Sub  
   
          Private   Sub   Button2_Click(ByVal   sender   As   System.Object,   ByVal   e   As   System.EventArgs)   Handles   Button2.Click  
                  cccap.Stop()  
          End   Sub  
   
          Private   Sub   Button3_Click(ByVal   sender   As   System.Object,   ByVal   e   As   System.EventArgs)   Handles   Button3.Click  
                  cccap.GrabImage("c:/test.bmp")  
          End   Sub  
   
          Private   Sub   Form1_Closed(ByVal   sender   As   Object,   ByVal   e   As   System.EventArgs)   Handles   MyBase.Closed  
                  cccap   =   Nothing  
          End   Sub  
   
          Private   Sub   Button4_Click(ByVal   sender   As   System.Object,   ByVal   e   As   System.EventArgs)   Handles   Button4.Click  
                  cccap.capDlgVideoSource()  
          End   Sub  
   
          Private   Sub   Button5_Click(ByVal   sender   As   System.Object,   ByVal   e   As   System.EventArgs)   Handles   Button5.Click  
                  cccap.capDlgVideoFormat()  
          End   Sub  
  End   Class   
  
   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值