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);

}

时间: 2024-10-10 10:31:48

C# 操作摄像头的相关文章

python opencv linux下合作操作摄像头

设想: 之前使用C#控制摄像头的,现在厌烦了windows,决定转移到linux下玩耍.感觉能够python语言特有的好入手,正好替代C#,选择了deepin2014.1作为试验品.现在的设想是第一步实现在自己电脑上对视频的采集,第二步实现视频传输.慢慢来吧.百度说python想操作摄像头,VideoCapture是windows特有的,linux要用opencv才行. 下载: 百度下载了最新的opencv,2.4.9版本,正好和deepin2014.1自带的python2.7般配,不冲突.且发

C# 调用AForge类库操作摄像头

如有雷同,不胜荣幸,若转载,请注明 最近做项目需要操作摄像头,在网上百度了很多资料,很多都是C#调用window API 发送SendMessage,实现操作摄像头,但是C#调用window API的时候因为驱动的问题,总是弹出视频选择对话框,让人很是无语,看到大牛们有的截获到了window消息,然后模拟点击确定按钮,这是在是不敢恭维啊,还有的大牛根据API原型重写了,至于我是一只IT小小鸟了,然后在继续百度,找到了一个AForge强大的C#类库,最后终于搞定了,接下来将我拙劣的代码部分贴出来,

实验2014051901:opencv操作摄像头

实验1 实验目的:使用opencv操作摄像头拍摄一张图片 函数: 1 CvCapture* cvCreateCameraCapture( int index ); 2 IplImage* cvQueryFrame( CvCapture* capture ); 实验代码: 1 #include"highgui.h" 2 #include"cv.h" 3 int main(){ 4 cvNamedWindow("w",0); 5 IplImage*

c# 利用AForge.NET组件操作摄像头

AForge.NET是一个专门为开发者和研究者基于C#框架设计的,这个框架提供了不同的类库和关于类库的资源,还有很多应用程序例子,包括计算机视觉与人工智能,图像处理,神经网络,遗传算法,机器学习,机器人等领域. 根据网上的方法,运行程序摄像头出来了,但是怎么截图呢?找到一个显示图片方法如下 [csharp] view plaincopyprint? private void video_NewFrame(object sender, NewFrameEventArgs eventArgs) {

Android实例-操作摄像头(XE8+小米2)

结果: 1.同样是照相,自己的程序设置为高质量时刷新慢,而小米手机的相机那真心反映快呀. 2.就算我设置为最高质量,可相片也没有小米手机的相片大.我最大是2000*1000,而小米可以做到3000*2000,如果有人问我为什么都是整数,我会K你的. 实例代码: 1 unit Unit1; 2 3 interface 4 5 uses 6 System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,

Python操作摄像头

实践环境: 操作系统:Windows 7(X64) Python版本:python-2.7.13.msi 使用插件:pygame-1.9.1.win32-py2.7.msi 软件下载: python-2.7.13.msi下载链接:https://www.python.org/ftp/python/2.7.13/python-2.7.13.msi pygame-1.9.1.win32-py2.7.msi下载链接:http://pygame.org/ftp/pygame-1.9.1.win32-py

C#下使用Tensorflow实现摄像头图像的处理

TensorFlow自带例子已经包含了android和ios下的摄像头图像识别,这里补充一个Windows下的,使用AForge库(www.aforgenet.com)操作摄像头. 代码在这里下载,使用VS2017编译. http://files.cnblogs.com/files/autosoftdev/TensorFlowCamera.zip 运行时,从这里 https://www.nuget.org/api/v2/package/TensorFlowSharp/1.2.2 下载并解压取出l

某米摄像头安全体验报告

某米摄像头安全体验报告 1.简介:          安全小组对某米摄像头进行了简单的分析,本报告进行了简单总结. 2.问题详述(客户端/设备): 2.1.新购置的或刚重置的某米摄像头可被恶意添加,导致隐私泄露. 问题描述:          新购置或刚重置过的摄像头接电时是出于未配置wifi状态的(闪橙色led),使用某米的手机客户端可以通过类似smart config的技术对有效范围内的某米摄像头设置wifi,方便用户的同时也存在一定的风险. 测试步骤: 1.  将新购置的某米摄像头接上电,

C#调用AForge实现摄像头录像

1: 首先下载库文件>> 也可以去官网寻找>> 下载本教程全代码>> 输出为MP4需要用到ffmpeg相关的文件,我打包的库已经带了,去官网找的库可以在这个目录找到: 2: 添加这些引用: 3: 两个全局变量: 1 //用来操作摄像头 2 private VideoCaptureDevice Camera = null; 3 //用来把每一帧图像编码到视频文件 4 private VideoFileWriter VideoOutPut = new VideoFileWr