A class for driving the camera

xiaoxiao2021-03-06  42

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 /// 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 /// /// Handle ///// Start the left side of the display /// <

Param name = "top"> Start displayed on the upper margins /// Width to display /// The length to display 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 /// 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 /// public void stop () {sendMessage (hwndc, wm_cap_driver_disconnect, 0, 0); bstat = false;}

///

/// 图 /// /// To save the path to the BMP file public void grabimage (string path) {INTPTR HBMP = Marshal.StringTohglobalansi (PATH); SendMessage (HWNDC, WM_CAP_SAVEDIB, 0, HBMP.TOINT64 ());}

///

/// Video /// /// To save the path of the AVI file 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 /// public void stopkinescope () {sendMessage (hwndc, wm_cap_stop, 0, 0);}

}

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

New Post(0)