收藏 分销(赏)

C#获取摄像头的几个简单方法.docx

上传人:仙人****88 文档编号:9461512 上传时间:2025-03-27 格式:DOCX 页数:50 大小:58.93KB
下载 相关 举报
C#获取摄像头的几个简单方法.docx_第1页
第1页 / 共50页
C#获取摄像头的几个简单方法.docx_第2页
第2页 / 共50页
点击查看更多>>
资源描述
有很多C#获取摄像头的实现方法,都是使用已经过时的技术之所以过时,是因为他们还在使用97年被directshow抛弃的摄像头调用类(avicap32.dll), 现在有比较先进一点的资料,大家到Google里面搜索一下吧! 我自己总结了一下,一些C#获取摄像头的方法很好用的,代码比较少的程序提供给大家下载: 1.C#写的简单的摄像头视频获取源代码 camera.rar 2.我自己正在使用的C#获取摄像头程序,代码相当的短(不到100行), 以下系统必备组件是必需的: Windows Installer 3.1 .NET Framework 3.5 Debug.rar源代码 c# 获取 摄像头 实现录像 利用普通的简易摄像头,通过C#语言即可开发成简易视频程序。本实例利用市场上购买的普通摄像头,利用VFW技术,实现单路视频监控系统。运行程序,窗体中将显示舰体摄像头采集的视频信息。如图13.9所示。 技术要点 本实例主要使用了VFW(Video for Windows)技术。VFW 是Microsoft公司为开发Windows平台下的视频应用程序提供的软件工具包,提供了一系列应用程序编程接口(API),用户可以通过这些接口很方便地实现视频捕获、视频编辑及视频播放等通用功能,还可利用回调函数开发比较复杂的视频应用程序。该技术的特点是播放视频时不需要专用的硬件设备,而且应用灵活,可以满足视频应用程序开发的需要。Windows操作系统自身就携带了VFW技术,系统安装时,会自动安装VFW的相关组件。 VFW技术主要由六个功能模块组成,下面进行简单说明。 AVICAP32.DLL:包含执行视频捕获的函数,给AVI文件的I/O处理和视频,音频设备驱动程序提供一个高级接口。 MSVIDEO.DLL:包含一套特殊的DrawDib函数,用来处理程序上的视频操作。 MCIAVI.DRV:包括对VFW的MCI命令解释器的驱动程序。 AVIFILE.DLL:包含由标准多媒体I/O(mmio)函数提供的更高级的命令,用来访问.AVI文件。 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 nWidth, 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 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; //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 = false; 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 Video1 { static class Program { /// <summary> /// 应用程序的主入口点。 /// </summary> [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); } } } 2、Form1.cs using System; using System.Collections.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_Click(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.Enabled = 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 { /// <summary> /// 必需的设计器变量。 /// </summary> private System.ComponentModel.IContainer components = null; /// <summary> /// 清理所有正在使用的资源。 /// </summary> /// <param>如果应释放托管资源,为 true;否则为 false。</param> protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #region Windows 窗体设计器生成的代码 /// <summary> /// 设计器支持所需的方法 - 不要 /// 使用代码编辑器修改此方法的内容。 /// </summary> private void InitializeComponent() { System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1)); this.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.Windows.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 = "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.buttonStop.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.EventHandler(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.UseVisualStyleBackColor = 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); this.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.InitialImage"))); 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.buttonStart); 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 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); 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 private 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、ClassVideoAPI.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类 { // 视频API调用 [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 static 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 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, int 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 bool SendMessage(IntPtr hWnd, int wMsg, int wParam, ref CAPDRIVERCAPS lParam); [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 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); // 常量 // 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; // public const int WM_CAP_START = WM_USER; public const int WM_CAP_SAVEDIB = WM_CAP_START + 25; public const string avicap32 = "avicap32.dll"; public const int WM_USER = 1024; /// <summary> ///WM_CAP_START=WM_USER=1024 /// </summary> public const int WM_CAP_START = WM_USER; // start of unicode messages /// <summary> /// 开始 WM_USER + 100=1124 /// </summary> public const int WM_CAP_UNICODE_START = WM_USER + 100; //开始 1124 /// <summary> /// /获得 CAPSTR EAMPTR /// WM_CAP_START + 1=1025 /// </summary> public const int WM_CAP_GET_CAPSTREAMPTR = (WM_CAP_START + 1); //获得 CAPSTR EAMPTR /// <summary> /// 设置收回错误 WM_CAP_START + 2=1026 /// </summary> public const int WM_CAP_SET_CALLBACK_ERROR = (WM_CAP_START + 2); //设置收回错误 /// <summary> /// 设置收回状态 WM_CAP_START + 3=1027 /// </summary> public const int WM_CAP_SET_CALLBACK_STATUS = (WM_CAP_START + 3); //设置收回状态 /// <summary> /// 设置收回出产 WM_CAP_START + 4=1028 /// </summary> public const int WM_CAP_SET_CALLBACK_YIELD = (WM_CAP_START + 4); //设置收回出产 /// <summary> /// 设置收回结构 WM_CAP_START + 5=1029 /// </summary> public const int WM_CAP_SET_CALLBACK_FRame = (WM_CAP_START + 5); //设置收回结构 /// <summary> /// 设置收回视频流 WM_CAP_START + 6=1030 /// </summary> public const int WM_CAP_SET_CALLBACK_VIDEOSTREAM = (WM_CAP_START + 6); //设置收回视频流 /// <summary> /// 设置收回视频波流 WM_CAP_START +7=1031 /// </summary> public const int WM_CAP_SET_CALLBACK_WAVESTREAM = (WM_CAP_START + 7); //设置收回视频波流 /// <summary> /// 获得使用者数据 WM_CAP_START + 8=1032 /// </summary> public const int WM_CAP_GET_USER_DATA = (WM_CAP_START + 8); //获得使用者数据 /// <summary> /// 设置使用者数据 WM_CAP_START + 9=1033 /// </summary> public const int WM_CAP_SET_USER_DATA = (WM_CAP_START + 9); //设置使用者数据 /// <summary> /// 驱动程序连接 WM_CAP_START + 10=1034 /// </summary> public const int WM_CAP_DRIVER_CONNECT = (WM_CAP_START + 10); //驱动程序连接 /// <summary> /// 断开启动程序连接 WM_CAP_START + 11=1035 /// </summary> public const int WM_CAP_DRIVER_DISCONNECT = (WM_CAP_START + 11); //断开启动程序连接 /// <summary> /// 获得驱动程序名字 WM_CAP_START + 12=1036 /// </summary> public const int WM_CAP_DRIVER_GET_NAME = (WM_CAP_START + 12); //获得驱动程序名字 /// <summary> /// 获得驱动程序版本 WM_CAP_START + 13=1037 /// </summary> public const int WM_CAP_DRIVER_GET_VERSION = (WM_CAP_START + 13); //获得驱动程序版本 /// <summary> /// 获得驱动程序帽子 WM_CAP_START + 14=1038 /// </summary> public const int WM_CAP_DRIVER_GET_CAPS = (WM_CAP_START + 14); //获得驱动程序帽子 /// <summary> /// 设置捕获文件 WM_CAP_START + 20=1044 /// </summary> public const int WM_CAP_FILE_SET_CAPTURE_FILE = (WM_CAP_START + 20); //设置捕获文件 /// <summary> /// 获得捕获文件 WM_CAP_START + 21=1045 /// </summary> public const int WM_CAP_FILE_GET_CAPTURE_FILE = (WM_CAP_START + 21); //获得捕获文件 /// <summary> /// 另存文件为 WM_CAP_START + 23=1047 /// </summary> public const int WM_CAP_FILE_SAVEAS = (WM_CAP_START + 23); //另存文件为 /// <summary> /// 保存文件 WM_CAP_START + 25=1049 /// </summary> public const int WM_CAP_FILE_SAVEDIB = (WM_CAP_START + 25); //保存文件 // out of order to save on ifdefs /// <summary> /// 分派文件 WM_CAP_START + 22=1044 /// </summary> public const int WM_CAP_FILE_ALLOCATE = (WM_CAP_START + 22); //分派文件 /// <summary> /// 设置开始文件 WM_CAP_START + 24=1046 /// </summary> public const int WM_CAP_FILE_SET_INFOCHUNK = (WM_CAP_START + 24); //设置开始文件 /// <summary> /// 编辑复制 WM_CAP_START + 30=1054 /// </summary> public const int WM_CAP_EDIT_COPY = (WM_CAP_START + 30); //编辑复制 /// <summary> /// 设置音频格式 WM_CAP_START + 35=1059 /// </summary> public const int WM_CAP_SET_AUDIOFORMAT = (WM_CAP_START + 35); //设置音频格式 /// <summary> /// 捕获音频格式 WM_CAP_START + 36=1060 /// </summary> public const int WM_CAP_GET_AUDIOFORMAT = (WM_CAP_START + 36); //捕获音频格式 /// <summary> /// 打开视频格式设置对话框 WM_CAP_START + 41=1065 /// </summary> public const int WM_CAP_DLG_VIDEOFORMAT = (WM_CAP_START + 41); //1065 打开视频格式设置对话框 /// <summary> /// 打开属性设置对话框,设置对比度、亮度等 WM_CAP_START + 42=1066 /// </summary> public const int WM_CAP_DLG_VIDEOSOURCE = (WM_CAP_START + 42); //1066 打开属性设置对话框,设置对比度、亮度等。 /// <summary> /// 打开视频显示 WM_CAP_START + 43=1067 /// </summary> public const int WM_CAP_DLG_VIDEODISPLAY = (WM_CAP_START + 43); //1067 打开视频显示 /// <summary> /// 获得视频格式 WM_CAP_START + 44=1068 /// </summary> public const int WM_CAP_GET_VIDEOFORMAT = (WM_CAP_START + 44); //1068 获
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 教育专区 > 小学其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服