| |||||
这段时间搞视频采集方面的程序,在国外网站上找到一个用C#写的驱动摄像头的程序。 经改造和调试,如下: 安装摄像头后,一般可以找到一个avicap32.dll文件 这是一个关于设想头的类 using System; 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 } 具体调用如下: using System; 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; ??/// ??/// 必需的设计器变量。 ??/// ??private System.ComponentModel.Container components = null; ??WebCamera wc; ??public Form1() ???// ??/// ??/// 清理所有正在使用的资源。 ??/// ??protected override void Dispose( bool disposing ) ??{ ???if( disposing ) ???{ ????if (components != null) ????{ ?????components.Dispose(); ????} ???} ???base.Dispose( disposing ); ??} ??#region Windows 窗体设计器生成的代码 ??/// 设计器支持所需的方法 - 不要使用代码编辑器修改 ??/// 此方法的内容。 ??/// ??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); ???// ???// 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.Form1_Load); ???this.ResumeLayout(false); ??} ??/// ??/// 应用程序的主入口点。 ??/// ??[STAThread] ??static void Main() ??{ ???Application.Run(new Form1()); ??} ??private void Form1_Load(object sender, System.EventArgs e) ??private void button1_Click(object sender, System.EventArgs e) ??private void b_stop_Click(object sender, System.EventArgs e) |
摄像头编程 选择自 libiegoupan 的 Blog
最新推荐文章于 2023-06-28 22:54:51 发布