1、有很多C#获取摄像头的实现方法,都是使用已经过时的技术之所以过时,是因为他们还在使用97年被directshow抛弃的摄像头调用类(avicap32.dll), 现在有比较先进一点的资料,大家到Google里面搜索一下吧! 我自己总结了一下,一些C#获取摄像头的方法很好用的,代码比较少的程序提供给大家下载: 1.C#写的简单的摄像头视频获取源代码 camera.rar 2.我自己正在使用的C#获取摄像头程序,代码相当的短(不到100行), 以下系统必备组件是必需的: Windows Installer 3.1 .NET Framework 3.5 Debug.r
2、ar源代码 c# 获取 摄像头 实现录像 利用普通的简易摄像头,通过C#语言即可开发成简易视频程序。本实例利用市场上购买的普通摄像头,利用VFW技术,实现单路视频监控系统。运行程序,窗体中将显示舰体摄像头采集的视频信息。如图13.9所示。 技术要点 本实例主要使用了VFW(Video for Windows)技术。VFW 是Microsoft公司为开发Windows平台下的视频应用程序提供的软件工具包,提供了一系列应用程序编程接口(API),用户可以通过这些接口很方便地实现视频捕获、视频编辑及视频播放等通用功能,还可利用回调函数开发比较复杂的视频应用程序。该技术的特点是播
3、放视频时不需要专用的硬件设备,而且应用灵活,可以满足视频应用程序开发的需要。Windows操作系统自身就携带了VFW技术,系统安装时,会自动安装VFW的相关组件。 VFW技术主要由六个功能模块组成,下面进行简单说明。 AVICAP32.DLL:包含执行视频捕获的函数,给AVI文件的I/O处理和视频,音频设备驱动程序提供一个高级接口。 MSVIDEO.DLL:包含一套特殊的DrawDib函数,用来处理程序上的视频操作。 MCIAVI.DRV:包括对VFW的MCI命令解释器的驱动程序。 AVIFILE.DLL:包含由标准多媒体I/O(mmio)函数提供的更高级的命令,用来访问.AVI文件
4、 ICM:压缩管理器,用于管理的视频压缩/解压缩的编译码器。 ACM:音频压缩管理器,提供与ICM相似的服务,适用于波形音频。 AVICAP32.DLL中的函数和USER32.DLL中的函数,函数语法及结构如下。 (1)capCreateCaptureWindow函数 该函数用于创建一个视频捕捉窗口。语法如下: [DllImport("avicap32.dll")] public static extern IntPtr capCreateCaptureWindowA(byte[] lpszWindowName, int dwStyle, int x, int y, int n
5、Width, int nHeight, IntPtr hWndParent, int nID); 参数说明如下。 lpszWindowName:标识窗口的名称。 dwStyle:标识窗口风格。 x、y:标识窗口的左上角坐标。 nWidth、nHeight:标识窗口的宽度和高度。 hWnd:标识父窗口句柄。 nID:标识窗口ID。 返回值:视频捕捉窗口句柄。 (2)SendMessage函数 用于向Windows系统发送消息机制。 [DllImport("User32.dll")] private static extern bool SendMessage(IntPtr
6、 hWnd, int wMsg, int wParam, int lParam); 参数说明如下。 hWnd:窗口句柄。 wMsg:将要发送的消息。 wParam、lParam:消息的参数,每个消息都有两个参数,参数设置由发送的消息而定。 Form1窗体中通过调用视频类中的方法来实现相应的功能。 在【开始录像】按钮的Click事件中添加如下代码: private void buttonStart_Click(object sender, EventArgs e) { buttonStart.Enabled = false; buttonStop.Enabled = true
7、 //btnPz.Enabled = true; video = new cVideo(picCapture.Handle, picCapture.Width, picCapture.Height); video.StartWebCam(); } 在【停止录像】按钮的Click事件中添加如下代码: private void buttonStop_Click(object sender, EventArgs e) { buttonStart.Enabled = true; buttonStop.Enabled = false; buttonPz.Enabled = fals
8、e; video.CloseWebcam(); } 在【拍照】按钮的Click事件下添加如下代码: private void buttonPz_Click(object sender, EventArgs e) { video.GrabImage(picCapture.Handle, "d:\\a.bmp"); } 完整代码如下: 1、Program.cs using System; using System.Collections.Generic; using System.Linq; using System.Windows.Forms; namespace V
9、ideo1
{
static class Program
{
///
10、Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace Video1 { public partial class Form1 : Form { cVideo video; public Form1() { InitializeComponent(); } private void buttonStart_Cli
11、ck(object sender, EventArgs e) { buttonStart.Enabled = false; buttonStop.Enabled = true; //btnPz.Enabled = true; video = new cVideo(picCapture.Handle, picCapture.Width, picCapture.Height); video.StartWebCam(); } private void buttonStop_Click(object sender, EventArgs e) { buttonStart.Enable
12、d = true;
buttonStop.Enabled = false;
buttonPz.Enabled = false;
video.CloseWebcam();
}
private void buttonPz_Click(object sender, EventArgs e)
{
video.GrabImage(picCapture.Handle, "d:\\a.bmp");
}
}
}
3、Form1.Designer.cs
namespace Video1
{
partial class Form1
{
///
13、计器变量。
///
private System.ComponentModel.IContainer components = null;
///
14、
base.Dispose(disposing);
}
#region Windows 窗体设计器生成的代码
///
15、his.buttonStart = new System.Windows.Forms.Button(); this.buttonStop = new System.Windows.Forms.Button(); this.buttonPz = new System.Windows.Forms.Button(); this.panelTop = new System.Windows.Forms.Panel(); this.picCapture = new System.Windows.Forms.PictureBox(); this.panelBottom = new System.W
16、indows.Forms.Panel(); this.panelTop.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.picCapture)).BeginInit(); this.panelBottom.SuspendLayout(); this.SuspendLayout(); // // buttonStart // this.buttonStart.Location = new System.Drawing.Point(39, 3); this.buttonStart.Name =
17、 "buttonStart"; this.buttonStart.Size = new System.Drawing.Size(88, 36); this.buttonStart.TabIndex = 1; this.buttonStart.Text = "开始录像"; this.buttonStart.UseVisualStyleBackColor = true; this.buttonStart.Click += new System.EventHandler(this.buttonStart_Click); // // buttonStop // this.butt
18、onStop.Location = new System.Drawing.Point(181, 3); this.buttonStop.Name = "buttonStop"; this.buttonStop.Size = new System.Drawing.Size(80, 36); this.buttonStop.TabIndex = 2; this.buttonStop.Text = "停止录像"; this.buttonStop.UseVisualStyleBackColor = true; this.buttonStop.Click += new System.Even
19、tHandler(this.buttonStop_Click); // // buttonPz // this.buttonPz.Location = new System.Drawing.Point(313, 3); this.buttonPz.Name = "buttonPz"; this.buttonPz.Size = new System.Drawing.Size(77, 36); this.buttonPz.TabIndex = 3; this.buttonPz.Text = "拍 照"; this.buttonPz.UseVisualStyleBackColo
20、r = true; this.buttonPz.Click += new System.EventHandler(this.buttonPz_Click); // // panelTop // this.panelTop.AutoSize = true; this.panelTop.Controls.Add(this.picCapture); this.panelTop.Dock = System.Windows.Forms.DockStyle.Fill; this.panelTop.Location = new System.Drawing.Point(0, 0); t
21、his.panelTop.Name = "panelTop"; this.panelTop.Size = new System.Drawing.Size(468, 372); this.panelTop.TabIndex = 4; // // picCapture // this.picCapture.Dock = System.Windows.Forms.DockStyle.Fill; this.picCapture.InitialImage = ((System.Drawing.Image)(resources.GetObject("picCapture.InitialI
22、mage"))); this.picCapture.Location = new System.Drawing.Point(0, 0); this.picCapture.Name = "picCapture"; this.picCapture.Size = new System.Drawing.Size(468, 372); this.picCapture.TabIndex = 0; this.picCapture.TabStop = false; // // panelBottom // this.panelBottom.Controls.Add(this.button
23、Start); this.panelBottom.Controls.Add(this.buttonStop); this.panelBottom.Controls.Add(this.buttonPz); this.panelBottom.Dock = System.Windows.Forms.DockStyle.Bottom; this.panelBottom.Location = new System.Drawing.Point(0, 327); this.panelBottom.Name = "panelBottom"; this.panelBottom.Size = new
24、System.Drawing.Size(468, 45); this.panelBottom.TabIndex = 5; // // Form1 // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(468, 372); this.Controls.Add(this.panelBottom);
25、 this.Controls.Add(this.panelTop); this.Name = "Form1"; this.Text = "Form1"; this.panelTop.ResumeLayout(false); ((System.ComponentModel.ISupportInitialize)(this.picCapture)).EndInit(); this.panelBottom.ResumeLayout(false); this.ResumeLayout(false); this.PerformLayout(); } #endregion privat
26、e System.Windows.Forms.PictureBox picCapture; private System.Windows.Forms.Button buttonStart; private System.Windows.Forms.Button buttonStop; private System.Windows.Forms.Button buttonPz; private System.Windows.Forms.Panel panelTop; private System.Windows.Forms.Panel panelBottom; } } 4、Clas
27、sVideoAPI.cs using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Drawing; using System.Runtime.InteropServices; using System.Threading; using System.Windows.Forms; using System.IO; namespace Video1 { public class VideoAPI //视频API类 { // 视频A
28、PI调用 [DllImport("avicap32.dll")]//包含了执行视频捕获的函数,它给AVI文件I/O和视频、音频设备驱动程序提供一个高级接口 public static extern IntPtr capCreateCaptureWindow(string lpszWindowName, int dwStyle, int x, int y, int nWidth, int nHeight, IntPtr hwndParent, int nID); [DllImport("AVICAP32.dll", CharSet = CharSet.Unicode)] public s
29、tatic extern bool capGetDriverDescription(int wDriverIndex, StringBuilder lpszName, int cbName, StringBuilder lpszVer, int cbVer); [DllImport("avicap32.dll")] public static extern IntPtr capCreateCaptureWindowA(byte[] lpszWindowName, int dwStyle, int x, int y, int nWidth, int nHeight, IntPtr hWndP
30、arent, 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("Us
31、er32.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, int wParam, int lParam); [DllImport("User32.dll")] public static extern bool SendMessage(IntPtr hWnd, int wM
32、sg, 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 bool SendMessage(IntPtr hWnd, int wMsg, int wParam, ref CAPDRIVERCAPS lParam); [
33、DllImport("User32.dll")] public static extern bool SendMessage(IntPtr hWnd, int wMsg, int wParam, ref CAPTUREPARMS lParam); [DllImport("User32.dll")] public static extern bool SendMessage(IntPtr hWnd, int wMsg, int wParam, ref CAPSTATUS lParam); [DllImport("User32.dll")] public static extern in
34、t 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); // 常量 // public const int WM_USER = 0x400; public const int WS_CHILD = 0x40000000; p
35、ublic 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; // p
36、ublic 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; // public const int WM_CAP_START = WM_USER; public const int WM_CAP_SAVEDIB = WM_CAP_START + 25; public const string avicap32
37、 "avicap32.dll";
public const int WM_USER = 1024;
///
38、/开始 1124
///
39、 2); //设置收回错误
///
40、
41、// 设置收回视频波流 WM_CAP_START +7=1031
///
public const int WM_CAP_SET_CALLBACK_WAVESTREAM = (WM_CAP_START + 7); //设置收回视频波流
///
42、AP_START + 9=1033
///
public const int WM_CAP_SET_USER_DATA = (WM_CAP_START + 9); //设置使用者数据
///
43、
public const int WM_CAP_DRIVER_DISCONNECT = (WM_CAP_START + 11); //断开启动程序连接
///
44、public const int WM_CAP_DRIVER_GET_VERSION = (WM_CAP_START + 13); //获得驱动程序版本
///
45、int WM_CAP_FILE_SET_CAPTURE_FILE = (WM_CAP_START + 20); //设置捕获文件
///
46、FILE_SAVEAS = (WM_CAP_START + 23); //另存文件为
///
47、ILE_ALLOCATE = (WM_CAP_START + 22); //分派文件
///
48、 30); //编辑复制
/// 49、mmary>
/// 打开视频格式设置对话框 WM_CAP_START + 41=1065
///
public const int WM_CAP_DLG_VIDEOFORMAT = (WM_CAP_START + 41); //1065 打开视频格式设置对话框
/// 50、设置对话框,设置对比度、亮度等。
///
©2010-2025 宁波自信网络信息技术有限公司 版权所有
客服电话:4009-655-100 投诉/维权电话:18658249818