C#網路攝影機 編程 執行個體

來源:互聯網
上載者:User
安裝網路攝影機後,一般可以找到一個avicap32.dll檔案,此檔案中封裝了對網路攝影機的相關操作API

然後自己寫一個關於網路攝影機的類

using  system;
using  System.Runtime.InteropServices;

namespace  webcam
{
///  
///  avicap  的摘要說明。
///  
public  class  showVideo
{
//  showVideo  calls
[DllImport("avicap32.dll")]  public  static  extern  IntPtr  capCreateCaptureWindowA(byte[]  lpszWindowName,  int  dwStyle,  int  x,  int  y,  int  nWidth,  int  nHeight,  IntPtr  hWndParent,  int  nID);
[DllImport("avicap32.dll")]  public  static  extern  bool  capGetDriverDescriptionA(short  wDriver,  byte[]  lpszName,  int  cbName,  byte[]  lpszVer,  int  cbVer);
[DllImport("User32.dll")]  public  static  extern  bool  SendMessage(IntPtr  hWnd,  int  wMsg,  bool  wParam,  int  lParam);  
[DllImport("User32.dll")]  public  static  extern  bool  SendMessage(IntPtr  hWnd,  int  wMsg,  short  wParam,  int  lParam);  
[DllImport("User32.dll")]  public  static  extern  bool  SendMessage(IntPtr  hWnd,  int  wMsg,  short  wParam,  FrameEventHandler  lParam);  
[DllImport("User32.dll")]  public  static  extern  bool  SendMessage(IntPtr  hWnd,  int  wMsg,  int  wParam,  ref  BITMAPINFO  lParam);
[DllImport("User32.dll")]  public  static  extern  int  SetWindowPos(IntPtr  hWnd,  int  hWndInsertAfter,  int  x,  int  y,  int  cx,  int  cy,  int  wFlags);
[DllImport("avicap32.dll")]public  static  extern  int  capGetVideoFormat(IntPtr  hWnd,  IntPtr  psVideoFormat,  int  wSize  );

//  constants
public  const  int  WM_USER  =  0x400;
public  const  int  WS_CHILD  =  0x40000000;
public  const  int  WS_VISIBLE  =  0x10000000;
public  const  int  SWP_NOMOVE  =  0x2;
public  const  int  SWP_NOZORDER  =  0x4;
public  const  int  WM_CAP_DRIVER_CONNECT  =  WM_USER  +  10;
public  const  int  WM_CAP_DRIVER_DISCONNECT  =  WM_USER  +  11;
public  const  int  WM_CAP_SET_CALLBACK_FRAME  =  WM_USER  +  5;
public  const  int  WM_CAP_SET_PREVIEW  =  WM_USER  +  50;
public  const  int  WM_CAP_SET_PREVIEWRATE  =  WM_USER  +  52;
public  const  int  WM_CAP_SET_VIDEOFORMAT  =  WM_USER  +  45;
  
//  Structures
[StructLayout(LayoutKind.Sequential)]  public  struct  VIDEOHDR
{
[MarshalAs(UnmanagedType.I4)]  public  int  lpData;
[MarshalAs(UnmanagedType.I4)]  public  int  dwBufferLength;
[MarshalAs(UnmanagedType.I4)]  public  int  dwBytesUsed;
[MarshalAs(UnmanagedType.I4)]  public  int  dwTimeCaptured;
[MarshalAs(UnmanagedType.I4)]  public  int  dwUser;
[MarshalAs(UnmanagedType.I4)]  public  int  dwFlags;
[MarshalAs(UnmanagedType.ByValArray,  SizeConst=4)]  public  int[]  dwReserved;
}

[structlayout(layoutkind.sequential)]  public  struct  bitmapinfoheader
{
[MarshalAs(UnmanagedType.I4)]  public  Int32  biSize  ;
[MarshalAs(UnmanagedType.I4)]  public  Int32  biWidth  ;
[MarshalAs(UnmanagedType.I4)]  public  Int32  biHeight  ;
[MarshalAs(UnmanagedType.I2)]  public  short  biPlanes;
[MarshalAs(UnmanagedType.I2)]  public  short  biBitCount  ;
[MarshalAs(UnmanagedType.I4)]  public  Int32  biCompression;
[MarshalAs(UnmanagedType.I4)]  public  Int32  biSizeImage;
[MarshalAs(UnmanagedType.I4)]  public  Int32  biXPelsPerMeter;
[MarshalAs(UnmanagedType.I4)]  public  Int32  biYPelsPerMeter;
[MarshalAs(UnmanagedType.I4)]  public  Int32  biClrUsed;
[MarshalAs(UnmanagedType.I4)]  public  Int32  biClrImportant;
}  

[structlayout(layoutkind.sequential)]  public  struct  bitmapinfo
{
[MarshalAs(UnmanagedType.Struct,  SizeConst=40)]  public  BITMAPINFOHEADER  bmiHeader;
[MarshalAs(UnmanagedType.ByValArray,  SizeConst=1024)]  public  Int32[]  bmiColors;
}
  
public  delegate  void  FrameEventHandler(IntPtr  lwnd,  IntPtr  lpVHdr);
  
//  Public  methods
public  static  object  GetStructure(IntPtr  ptr,valueType  structure)
{
return  Marshal.PtrToStructure(ptr,structure.GetType());
}
  
public  static  object  GetStructure(int  ptr,valueType  structure)
{
return  GetStructure(new  IntPtr(ptr),structure);
}
  
public  static  void  Copy(IntPtr  ptr,byte[]  data)
{
Marshal.Copy(ptr,data,0,data.Length);
}
  
public  static  void  Copy(int  ptr,byte[]  data)
{
Copy(new  IntPtr(ptr),data);
}
  
public  static  int  SizeOf(object  structure)
{
return  Marshal.SizeOf(structure);  
}
}

//web  camera  class
public  class  WebCamera
{
//  Constructur
public  WebCamera(IntPtr  handle,  int  width,int  height)
{
mControlPtr  =  handle;
mWidth  =  width;
mHeight  =  height;
}
  
//  delegate  for  frame  callback
public  delegate  void  RecievedFrameEventHandler(byte[]  data);
public  event  RecievedFrameEventHandler  RecievedFrame;
  
private  IntPtr  lwndC;  //  Holds  the  unmanaged  handle  of  the  control
private  IntPtr  mControlPtr;  //  Holds  the  managed  pointer  of  the  control
private  int  mWidth;
private  int  mHeight;
  
private  showVideo.FrameEventHandler  mFrameEventHandler;  //  Delegate  instance  for  the  frame  callback  -  must  keep  alive!  gc  should  NOT  collect  it
  
//  Close  the  web  camera
public  void  CloseWebcam()
{
this.capDriverDisconnect(this.lwndC);
}
  
//  start  the  web  camera
public  void  StartWebCam()
{
byte[]  lpszName  =  new  byte[100];
byte[]  lpszVer  =  new  byte[100];
  
showVideo.capGetDriverDescriptionA(0,  lpszName,  100,lpszVer,  100);
this.lwndC  =  showVideo.capCreateCaptureWindowA(lpszName,  showVideo.WS_VISIBLE  +  showVideo.WS_CHILD,  0,  0,  mWidth,  mHeight,  mControlPtr,  0);
  
if  (this.capDriverConnect(this.lwndC,  0))
{
this.capPreviewRate(this.lwndC,  66);
this.capPreview(this.lwndC,  true);
showVideo.BITMAPINFO  bitmapinfo  =  new  showVideo.BITMAPINFO();  
bitmapinfo.bmiHeader.biSize  =  showVideo.SizeOf(bitmapinfo.bmiHeader);
bitmapinfo.bmiHeader.biWidth  =  

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.