This article drives the camera with the Avicap32.dll library. Due to grab, video features. Using system; using system.drawing; using system.drawing.image;
Namespace Using System; Using System.Runtime.InteropServices; Using System.drawing;
namespace PickHead {/// /// a camera control class /// summary> public class Pick {private const int WM_USER = 0x400; private const int WS_CHILD = 0x40000000; private const int WS_VISIBLE = 0x10000000; private const int WM_CAP_START = WM_USER; private const int WM_CAP_STOP = WM_CAP_START 68; private const int WM_CAP_DRIVER_CONNECT = WM_CAP_START 10; private const int WM_CAP_DRIVER_DISCONNECT = WM_CAP_START 11; private const int WM_CAP_SAVEDIB = WM_CAP_START 25; private const int WM_CAP_GRAB_FRAME = WM_CAP_START 60 ; private const int WM_CAP_SEQUENCE = WM_CAP_START 62; private const int WM_CAP_FILE_SET_CAPTURE_FILEA = WM_CAP_START 20; private const int WM_CAP_SEQUENCE_NOFILE = WM_CAP_START 63; private const int WM_CAP_SET_OVERLAY = WM_CAP_START 51; private const int WM_CAP_SET_PREVIEW = WM_CAP_START 50; private const int WM_CAP_SET_CALLBACK_VIDEOSTREAM = WM_CAP_START 6; private const INT WM_CAP_SET_CALLBACK_ERROR = WM_CAP_START 2; Private Const Int WM_CAP _SET_CALLBACK_STATUSA = WM_CAP_START 3; private const int WM_CAP_SET_CALLBACK_FRAME = WM_CAP_START 5; private const int WM_CAP_SET_SCALE = WM_CAP_START 53; private const int WM_CAP_SET_PREVIEWRATE = WM_CAP_START 52; private IntPtr hWndC; private bool bStat = false; private IntPtr mControlPtr; private int mWidth; private INT MLEIGHT; Private Int Mleft; Private Int MTOP; /// /// Initializing camera /// summary> /// Handle param> ///// Start the left side of the display param> /// <
Param name = "top"> Start displayed on the upper margins param> /// Width to display param> /// The length to display param> public Pick (IntPtr handle, int left, int top, int width, int height) {mControlPtr = handle; mWidth = width; mHeight = height; mLeft = left; mTop = top;} [DllImport ( "avicap32. dll ")] private static extern IntPtr capCreateCaptureWindowA (byte [] lpszWindowName, int dwStyle, int x, int y, int nWidth, int nHeight, IntPtr hWndParent, int nID); [DllImport (" avicap32.dll ")] private static extern INT CapGetVideoFormat (INTPTR HWND, INTPTR PSVideoFormat, int wsize); [DLLIMPORT ("User32.dll")] Private Static Extern Bool SendMessage (INTPTR HWND, INT WMSG, INT WPARAM, long lparam);
/// /// Start display image /// summary> public void start () {if (bstat) return; bstat = true; Byte [] lpszname = new byte [100]; hwndc = capcreatecaptureWindowa LPSZNAME, WS_CHILD | WS_Visible, Mleft, Mtop, MWidth, MLEIGHT, MCONTROLPTR, 0);
if (hWndC.ToInt32 () = 0!) {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); }
Return;
}
/// /// Stop display /// summary> public void stop () {sendMessage (hwndc, wm_cap_driver_disconnect, 0, 0); bstat = false;}
/// /// 图 /// summary> /// To save the path to the BMP file param> public void grabimage (string path) {INTPTR HBMP = Marshal.StringTohglobalansi (PATH); SendMessage (HWNDC, WM_CAP_SAVEDIB, 0, HBMP.TOINT64 ());}
/// /// Video /// summary> /// To save the path of the AVI file param> public void kinescope (string path) {INTPTR HBMP = Marshal .Stringtohglobalansi (path); SendMessage (HWNDC, WM_CAP_FILE_SET_CAPTURE_FILEA, 0, HBMP.TOINT64 ()); sendMessage (hwndc, wm_cap_sequence, 0, 0);}
/// /// Stop recording /// summary> public void stopkinescope () {sendMessage (hwndc, wm_cap_stop, 0, 0);}
}