Camera Programming
After installing the camera, you can find an avicap32.dll file.
This is a class about the head.
Using system;
Using system. runtime. interopservices;
Namespace webcam
{
///
/// Summary of avicap.
///
Public class showvideo
{
// Showvideo CILS
[Dllimport ("avicap32.dll")] public static extern intptr capcreatecapture0000wa (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
{
[Financialas (unmanagedtype. I4)] public int lpdata;
[Financialas (unmanagedtype. I4)] public int dwbufferlength;
[Financialas (unmanagedtype. I4)] public int dwbytesused;
[Financialas (unmanagedtype. I4)] public int dwtimecaptured;
[Financialas (unmanagedtype. I4)] public int dwuser;
[Financialas (unmanagedtype. I4)] public int dwflags;
[Financialas (unmanagedtype. byvalarray, sizeconst = 4)] public int [] dwreserved;
}
[Structlayout (layoutkind. Sequential)] public struct bitmapinfoheader
{
[Financialas (unmanagedtype. I4)] public int32 bisize;
[Financialas (unmanagedtype. I4)] public int32 biwidth;
[Financialas (unmanagedtype. I4)] public int32 biheight;
[Financialas (unmanagedtype. I2)] public short biplanes;
[Financialas (unmanagedtype. I2)] public short bibitcount;
[Financialas (unmanagedtype. I4)] public int32 bicompression;
[Financialas (unmanagedtype. I4)] public int32 bisizeimage;
[Financialas (unmanagedtype. I4)] public int32 bixpelspermeter;
[Financialas (unmanagedtype. I4)] public int32 biypelspermeter;
[Financialas (unmanagedtype. I4)] public int32 biclrused;
[Financialas (unmanagedtype. I4)] public int32 biclrimportant;
}
[Structlayout (layoutkind. Sequential)] public struct bitmapinfo
{
[Financialas (unmanagedtype. struct, sizeconst = 40)] public bitmapinfoheader bmiheader;
[Financialas (unmanagedtype. byvalarray, sizeconst = 1024)] public int32 [] bmicolors;
}
Public Delegate void frameeventhandler (intptr lwnd, intptr lpvhdr );
// Public methods
Public static object getstructure (intptr, 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, 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 shoshould 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 [1, 100];
Byte [] lpszver = new byte [1, 100];
Showvideo. capgetdriverdescriptiona (0, lpszname, 100, lpszver, 100 );
This. lwndc = showvideo. capcreatecapturew.wa (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 = 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)
{< br> return showvideo. sendmessage (lwnd, showvideo. wm_cap_driver_disconnect, 0, 0);
}< br>
private bool cappreview (intptr lwnd, bool f)
{< br> 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 showvideo. bitmapinfo BMP format, int capformatsize)
{
Return showvideo. sendmessage (hcapwnd, showvideo. wm_cap_set_videoformat, capformatsize, ref BMP format );
}
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. drawing;
Using system. collections;
Using system. componentmodel;
Using system. Windows. forms;
Using system. Data;
Using webcam;
Namespace webcam
{
///
/// Summary of 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;
///
/// Required designer variables.
///
Private system. componentmodel. Container components = NULL;
Webcamera WC;
Public form1 ()
{
//
// Required for Windows Form Designer support
//
Initializecomponent ();
//
// Todo: add Any constructor after initializecomponent callsCode
//
}
///
/// Clear all resources in use.
///
Protected override void dispose (bool disposing)
{
If (disposing)
{
If (components! = NULL)
{
Components. Dispose ();
}
}
Base. Dispose (disposing );
}
# Region code generated by Windows Form Designer
///
/// The designer supports the required methods-do not use the code editor to modify
/// Content of 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. button#click );
//
// Panelpreview
//
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
//
This. 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. Controls. Add (this. B _play );
This. maximizebox = false;
This. minimizebox = false;
This. Name = "form1 ";
This. Text = "goodview test web camera ";
This. Load + = new system. eventhandler (this. form#load );
This. resumelayout (false );
}
# Endregion
///
/// ApplicationProgram.
///
[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. Width, panelpreview. Height );
WC. startwebcam ();
}
Private void button#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)
{< br> B _play.enabled = true;
B _stop.enabled = false;
WC. closewebcam ();
}< BR >}