Video capture class

xiaoxiao2021-03-06  68

Contains Avicap32.dll

Using system; using system.runtime.interopservices;

Namespace Webcam {///// Avicap's summary description.

/// 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 = 352; bitmapinfo .bmiHeader.biHeight = 288; bitmapinfo.bmiHeader.biPlanes = 1; bitmapinfo.bmiHeader.biBitCount = 24; this.capSetVideoFormat (this.lwndC, ref bitmapinfo, showVideo.SizeOf (bitmapinfo)); this.mFrameEventHandler =

new showVideo.FrameEventHandler (FrameCallBack); this.capSetCallbackOnFrame (this.lwndC, this.mFrameEventHandler); showVideo.SetWindowPos (this.lwndC, 0, 0, 0, mWidth, mHeight, 6);}} // private functions private bool capDriverConnect (IntPtr lwnd, short i) {return showVideo.SendMessage (lwnd, showVideo.WM_CAP_DRIVER_CONNECT, i, 0);} private bool capDriverDisconnect (IntPtr lwnd) {return showVideo.SendMessage (lwnd, showVideo.WM_CAP_DRIVER_DISCONNECT, 0, 0); } private bool capPreview (IntPtr lwnd, bool f) {return showVideo.SendMessage (lwnd, showVideo.WM_CAP_SET_PREVIEW, f, 0);} private bool capPreviewRate (IntPtr lwnd, short wMS) {return showVideo.SendMessage (lwnd, showVideo.WM_CAP_SET_PREVIEWRATE , wMS, 0);} private bool capSetCallbackOnFrame (IntPtr lwnd, showVideo.FrameEventHandler lpProc) {return showVideo.SendMessage (lwnd, showVideo.WM_CAP_SET_CALLBACK_FRAME, 0, lpProc);} private bool capSetVideoFormat (IntPtr hCapWnd, ref s howVideo.BITMAPINFO BmpFormat, int CapFormatSize) {return showVideo.SendMessage (hCapWnd, showVideo.WM_CAP_SET_VIDEOFORMAT, CapFormatSize, ref BmpFormat);} private void FrameCallBack (IntPtr lwnd, IntPtr lpVHdr) {showVideo.VIDEOHDR videoHeader = new showVideo.VIDEOHDR (); byte [] VideoData; videoHeader = (showVideo.VIDEOHDR) showVideo.GetStructure (lpVHdr, videoHeader); VideoData = new byte [videoHeader.dwBytesUsed]; showVideo.Copy (videoHeader.lpData, VideoData);! if (this.RecievedFrame = null This.RecievedFrame (videodata);}}}

The specific call is as follows:

Using system; using system.collections; using system.bomponentmodel; using system.data; using webcam;

A summary description of Namespace Webcam {/// /// Form1. /// public class Form1: System.Windows.Forms.Form {private System.Windows.Forms.Panel panelPreview; private System.Windows.Forms.Button b_play; private System.Windows.Forms.Button b_stop; /// // / Essential designer variables. /// private system.componentmodel.container components = null; Webcamera Wc; Public Form1 () {// // Windows Form Designer Support for // InitializationComponent ();

// // Todo: Add any constructor code after INITIALIZEComponent call //}

/ / / / / Clean all the resources being used. /// Protected {if (disponents! = Null) {components.dispose ();}}.

#REGION Windows Form Designer Generated Code // // Designer Support for Method - Do not use the code editor to modify the // / this method. /// private void InitializeComponent () {this.b_play = new System.Windows.Forms.Button (); this.panelPreview = new System.Windows.Forms.Panel (); this.b_stop = new System.Windows.Forms. Button (); this.suspendlayout (); /// B_Play // this.b_play.location = new system.drawing.point (280, 368); this.b_play.name = "b_play"; this.b_play.tabindex = 0; this.b_play.text = "& play"; this.b_play.click = new system.eventhandler (this.button1_click); ////paPreview // this.PanelPreview.Location = new system.drawing.point ( 8, 8); this.PanelPreview.name = "panelpreview"; this.PanelPreview.size = new system.drawing.size (344, 272); this.PanelPreview.tabindex = 1; // // b_stop // this. B_Stop.Enabled = false; this.b_stop.location = new system.drawing.point (360, 368); this.b_stop.name = "b_stop"; this.b_stop.tabindex = 2; this.b_stop.text = "& stop "; This.b_stop.click = new system.eventhandler (this.b_stop_click; // // Form1 // t His.autoscalebasesize = new system.drawing.size (6, 14); this.clientsize = new system.drawing.size (464, 413); this.controls.add (this.b_stop); this.controls.add (this .panelpreview; this.b_play; this.maximizebox = false; this.minimizebox = false; this.name = "form1"; this.text = "Goodview test web camera"; this.Load = New System.EventHandler (this.form1_load); this.ResumeLayout (false);} #ENDREGION

/// /// The main entry point for the application. /// [STAThread] static void Main () {Application.Run (new Form1 ());} private void Form1_Load (object sender, System.EventArgs e) {b_play.Enabled = false; b_stop.Enabled = true; panelPreview. Size = new size (330, 330); wc = new Webcamera (PanelPreview.Handle, Panelpreview.height); wc.startwebcam ();

private void button1_Click (object sender, System.EventArgs e) {b_play.Enabled = false; b_stop.Enabled = true; panelPreview.Size = new Size (330,330); wc = new WebCamera (panelPreview.Handle, panelPreview.Width, panelPreview. HEIGHT); wc.startwebcam ();

Private void b_stop_click (object sender, system.eventargs e) {b_play.enabled = true; b_stop.enabled = false; wc.closeWebcam ();}}}

转载请注明原文地址:https://www.9cbs.com/read-119273.html

New Post(0)