C# 操作摄像头
如有雷同,不胜荣幸,若转载,请注明
这个是大众普通方法,鉴于有网友和朋友问相同的问题。在这里将我的拙劣的代码关键部分贴出来。以便帮助很多其它的朋友们,不足之处甚多,我能够学习,交流,请教阁下
废话到此。直接上代码
private const int WS_CHILD = 0x40000000; //1073741824
private const int WS_VISIBLE = 0x10000000; //268435456
private const int WM_USER = 0x400; //1024
private const int WM_CAP_START = WM_USER; //1024
private const int WM_CAP_STOP = WM_CAP_START + 68; //1092
private const int WM_CAP_DRIVER_CONNECT = WM_CAP_START + 10; //1034
private const int WM_CAP_DRIVER_DISCONNECT = WM_CAP_START + 11; //1035
private const int WM_CAP_SAVEDIB = WM_CAP_START + 25; //1049
private const int WM_CAP_GRAB_FRAME = WM_CAP_START + 60; //1084
private const int WM_CAP_SEQUENCE = WM_CAP_START + 62; //1086
private const int WM_CAP_FILE_SET_CAPTRUE_FILEA = WM_CAP_START + 20; //1044
private const int WM_CAP_SEQUENCE_NOFILE = WM_CAP_START + 63; //1087
private const int WM_CAP_CAPTURE_IMAGE_CLIPBOARD = WM_CAP_START + 30; //1054 复制捕捉的图像到剪切板
private const int WM_CAP_SET_OVERLAY = WM_CAP_START + 51; //1075
private const int WM_CAP_SET_PREVIEW = WM_CAP_START + 50; //1074
private const int WM_CAP_SET_CALLBACK_VIDEOSTREAM = WM_CAP_START + 6; //1030
private const int WM_CAP_SET_CALLBACK_ERROR = WM_CAP_START + 2; //1026
private const int WM_CAP_SET_CALLBACK_STATUSA = WM_CAP_START + 3; //1027
private const int WM_CAP_SET_CALLBACK_FRAME = WM_CAP_START + 5; //1029
private const int WM_CAP_SET_SCALE = WM_CAP_START + 53; //1077
private const int WM_CAP_SET_PREVIEWRATE = WM_CAP_START + 52; //1076
private const int WM_CAP_DLG_VIDEOSOURCE = WM_CAP_START + 42; //1066 选择摄像头
/// <summary>
/// 开启视频摄像头
/// </summary>
/// <returns></returns>
public static void Start()
{
if (bWorkStart)
{
return;
}
byte[] lpszName = new byte[100];
try
{
hWndC = Windows.capCreateCaptureWindow(lpszName, WS_CHILD | WS_VISIBLE, mLeft, mTop, mWidth, mHeight, mControlPtr, 0);
if (hWndC.ToInt32() != 0)
{
Windows.SendMessage(hWndC, WM_CAP_SET_CALLBACK_VIDEOSTREAM, 0, 0); //设置返回视频流
Windows.SendMessage(hWndC, WM_CAP_SET_CALLBACK_ERROR, 0, 0); //设置返回错误
Windows.SendMessage(hWndC, WM_CAP_SET_CALLBACK_STATUSA, 0, 0); //设置返回状态
//=====================这条比較慢=======================
Windows.SendMessage(hWndC, WM_CAP_DRIVER_CONNECT, 0, 0); //设备连接
//=====================================================
//Windows.SendMessage(hWndC, WM_CAP_SEQUENCE, 0, 0); //開始捕捉
//=====================================================
Windows.SendMessage(hWndC, WM_CAP_SET_SCALE, 1, 0); //设置比例
Windows.SendMessage(hWndC, WM_CAP_SET_PREVIEWRATE, 66, 0); //设置预览速度
Windows.SendMessage(hWndC, WM_CAP_SET_OVERLAY, 1, 0); //设置叠加
Windows.SendMessage(hWndC, WM_CAP_SET_PREVIEW, 1, 0); //设置预览
bWorkStart = true;
}
//return true;
}
catch (Exception)
{
//return false;
}
//finally
//{
//写日志 Global.log.Write( “SendMessage “);
//LogClass.WriteLog("SendMessage");
//}
}
/// <summary>
/// 关闭视频摄像头
/// </summary>
public static void Stop()
{
Windows.SendMessage(hWndC, WM_CAP_DRIVER_DISCONNECT, 0, 0);
bWorkStart = false;
}
/// <summary>
/// 抓图或者拍照。然后保存到指定路径下
/// </summary>
/// <param name="path">要保存bmp文件的路径</param>
public static void GrabImage(string path)
{
IntPtr hBmp = Marshal.StringToHGlobalAnsi(path);
Windows.SendMessage(hWndC, WM_CAP_SAVEDIB, 0, hBmp.ToInt32()); //0x41e
}
/// <summary>
/// 捕捉图像拷贝到剪切板
/// </summary>
/// <returns></returns>
public static bool CopyToClipBoard()
{
return Windows.SendMessage(hWndC, WM_CAP_CAPTURE_IMAGE_CLIPBOARD, 0, 0);
}
C# 操作摄像头的更多相关文章
- C# 调用AForge类库操作摄像头
如有雷同,不胜荣幸,若转载,请注明 最近做项目需要操作摄像头,在网上百度了很多资料,很多都是C#调用window API 发送SendMessage,实现操作摄像头,但是C#调用window API的 ...
- C#操作摄像头 实现拍照功能
从正式工作以来一直做的都是基于B/S的Web开发,已经很长时间不研究C/S的东西了,但是受朋友的委托,帮他做一下拍照的这么个小功能.其实类似的代码网上有很多,但是真的能够拿来运行的估计也没几个.本来是 ...
- 转:C#操作摄像头
转自: http://blog.csdn.NET/chenhongwu666/article/details/40594365 如有雷同,不胜荣幸,若转载,请注明 最近做项目需要操作摄像头,在网上百度 ...
- Web操作摄像头、高拍仪、指纹仪等设备的功能扩展方案
摘要:信息系统开发中难免会有要操作摄像头.高拍仪.指纹仪等硬件外设,异或诸如获取机器签名.硬件授权保护(加密锁)检测等情况.受限于Web本身运行机制,就不得不使用Active.浏览器插件进行能力扩展了 ...
- Android实例-操作摄像头(XE8+小米2)
结果: 1.同样是照相,自己的程序设置为高质量时刷新慢,而小米手机的相机那真心反映快呀. 2.就算我设置为最高质量,可相片也没有小米手机的相片大.我最大是2000*1000,而小米可以做到3000*2 ...
- JS操作摄像头
<script src="javascript/jquery-1.9.1.min.js"></script> <fieldset> <le ...
- Python操作摄像头
实践环境: 操作系统:Windows 7(X64) Python版本:python-2.7.13.msi 使用插件:pygame-1.9.1.win32-py2.7.msi 软件下载: python- ...
- C#对摄像头的操作示例,采用Aforge库
操作摄像头有三个办法:VFW.DirectShow.花钱买第三方控件 VFW技术比较古老,无法解决驱动不完善造成的某些问题 DirectShow技术相对完善一些,但这是C++才能实现的技术.如果用.N ...
- 在WPF中使用AForge.net控制摄像头拍照
原文:在WPF中使用AForge.net控制摄像头拍照 利用AForge.net控制摄像头拍照最方便的方法就是利用PictureBox显示摄像头画面,但在WPF中不能直接使用PictureBox.必须 ...
随机推荐
- acdsee 15中文版的许可证密钥+激活方法
按以下方法就可以使用了,进入注册表的命令是:开始-运行-输入regedit 进入注册表后按下面的步骤操作就行. ACDSee15中文版激活英文版激活码5NR9CW-SSRMMY-KFWMQU-ZP ...
- python学习-- {% csrf_token %}
1.不推荐禁用掉django中的CSRF. 2.我们可以再html页面的form表单中添加csrf_token,带着表单的请求一起发送到服务器去验证. <form enctype=" ...
- pg 创建自增id
CREATE SEQUENCE original_site_id_seq START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1; 先创 ...
- 【NOIP2016】愤怒的小鸟 搜索
题目描述 Kiana 最近沉迷于一款神奇的游戏无法自拔. 简单来说,这款游戏是在一个平面上进行的. 有一架弹弓位于 (0,0)(0,0) 处,每次 Kiana 可以用它向第一象限发射一只红色的小鸟,小 ...
- CF750E 线段树+矩阵乘矩阵加
题目描述 A string tt is called nice if a string "2017" occurs in tt as a subsequence but a str ...
- C语言变量长度在32位和64位处理器上的关系
C语言变量长度在32位和64位处理器上的关系 理论上来讲 我觉得数据类型的字节数应该是由CPU决定的,但是实际上主要由编译器决定(占多少位由编译器在编译期间说了算).常用数据类型对应字节数 ...
- Leetcode 433.最小基因变化
最小基因变化 一条基因序列由一个带有8个字符的字符串表示,其中每个字符都属于 "A", "C", "G", "T"中的任 ...
- [转]netstat -tnl 列出监听中的连接,查看端口是否开启
任何网络服务的后台进程都会打开一个端口,用于监听接入的请求. 这些正在监听的套接字也和连接的套接字一样,也能被 netstat 列出来. 参数 tnl, 现在我们可以看到处于监听状态的 TCP 端口和 ...
- Nginx报 No input file specified. 的问题解决之路 转
https://m.aliyun.com/yunqi/articles/34240 今天接手公司的一个项目,照例将项目clone下来,配置本地host,nginx,然后访问. 怎么回事?迅速在php的 ...
- mybatis学习(九)——动态sql
MyBatis 的强大特性之一便是它的动态 SQL.可以根据不同条件拼接 SQL 语句. 动态 SQL 元素和使用 JSTL 或其他类似基于 XML 的文本处理器相似.主要由以下几种元素. if wh ...