//这篇文章主要介绍了c#实现摄像头拍照功能示例,需要的朋友可以参考下 using System.Drawing; using System.Drawing.Imaging; using System; using System.Runtime.InteropServices; private const int WM_USER = 0x400; private const int WS_CHILD = 0x40000000; private const int WS_VISIBLE = 0x10000000; private const int WM_CAP_START = WM_USER; private const int WM_CAP_STOP = WM_CAP_START + 68; private const int WM_CAP_DRIVER_CONNECT = WM_CAP_START + 10; private const int WM_CAP_DRIVER_DISCONNECT = WM_CAP_START + 11; private const int WM_CAP_SAVEDIB = WM_CAP_START + 25; private const int WM_CAP_GRAB_FRAME = WM_CAP_START + 60; private const int WM_CAP_SEQUENCE = WM_CAP_START + 62; private const int WM_CAP_FILE_SET_CAPTURE_FILEA = WM_CAP_START + 20; private const int WM_CAP_SEQUENCE_NOFILE = WM_CAP_START + 63; private const int WM_CAP_SET_OVERLAY = WM_CAP_START + 51; private const int WM_CAP_SET_PREVIEW = WM_CAP_START + 50; private const int WM_CAP_SET_CALLBACK_VIDEOSTREAM = WM_CAP_START + 6; private const int WM_CAP_SET_CALLBACK_ERROR = WM_CAP_START + 2; private const int WM_CAP_SET_CALLBACK_STATUSA = WM_CAP_START + 3; private const int WM_CAP_SET_CALLBACK_FRAME = WM_CAP_START + 5; private const int WM_CAP_SET_SCALE = WM_CAP_START + 53; private const int WM_CAP_SET_PREVIEWRATE = WM_CAP_START + 52; private IntPtr hWndC; private bool bStat = false; private IntPtr mControlPtr; private int mWidth; private int mHeight; private int mLeft; private int mTop; /// <summary> /// 初始化摄像头 /// </summary> /// <param name="handle">控件的句柄</param> /// <param name="left">开始显示的左边距</param> /// <param name="top">开始显示的上边距</param> /// <param name="width">要显示的宽度</param> /// <param name="height">要显示的长度</param> public VideoClass(IntPtr handle, int left, int top, int width, int height) { mControlPtr = handle; mWidth = width; mHeight = height; mLeft = left; mTop = top; } [DllImport("avicap32.dll")] private static extern IntPtr capCreateCaptureWindowA(byte[] lpszWindowName, int dwStyle, int x, int y, int nWidth, int nHeight, IntPtr hWndParent, int nID); [DllImport("avicap32.dll")] private static extern int capGetVideoFormat(IntPtr hWnd, IntPtr psVideoFormat, int wSize); [DllImport("User32.dll")] private static extern bool SendMessage(IntPtr hWnd, int wMsg, int wParam, long lParam); [DllImport("avicap32.dll")] public static extern bool capGetDriverDescriptionA(short wDriver, byte[] lpszName, int cbName, byte[] lpszVer, int cbVer); /// <summary> /// 开始显示图像 /// </summary> public void Start() { if (bStat) return; bStat = true; byte[] lpszName = new byte[100]; hWndC = capCreateCaptureWindowA(lpszName, WS_CHILD | WS_VISIBLE, mLeft, mTop, mWidth, mHeight, mControlPtr, 0); if (hWndC.ToInt32() != 0) { SendMessage(hWndC, WM_CAP_SET_CALLBACK_VIDEOSTREAM, 0, 0); SendMessage(hWndC, WM_CAP_SET_CALLBACK_ERROR, 0, 0); SendMessage(hWndC, WM_CAP_SET_CALLBACK_STATUSA, 0, 0); SendMessage(hWndC, WM_CAP_DRIVER_CONNECT, 0, 0); SendMessage(hWndC, WM_CAP_SET_SCALE, 1, 0); SendMessage(hWndC, WM_CAP_SET_PREVIEWRATE, 66, 0); SendMessage(hWndC, WM_CAP_SET_OVERLAY, 1, 0); SendMessage(hWndC, WM_CAP_SET_PREVIEW, 1, 0); } return; } /// <summary> /// 停止显示 /// </summary> public void Stop() { SendMessage(hWndC, WM_CAP_DRIVER_DISCONNECT, 0, 0); bStat = false; } /// <summary> /// 抓图 /// </summary> /// <param name="path">要保存bmp文件的路径</param> public void GrabImage(string path) { IntPtr hBmp = Marshal.StringToHGlobalAnsi(path); SendMessage(hWndC, WM_CAP_SAVEDIB, 0, hBmp.ToInt64()); } /// <summary> /// 录像 /// </summary> /// <param name="path">要保存avi文件的路径</param> public void Kinescope(string path) { IntPtr hBmp = Marshal.StringToHGlobalAnsi(path); SendMessage(hWndC, WM_CAP_FILE_SET_CAPTURE_FILEA, 0, hBmp.ToInt64()); SendMessage(hWndC, WM_CAP_SEQUENCE, 0, 0); } /// <summary> /// 停止录像 /// </summary> public void StopKinescope() { SendMessage(hWndC, WM_CAP_STOP, 0, 0); }
相关推荐
这里将介绍一个C#摄像头实现拍照功能的简单代码示例,代码虽然不短,但是基本上实现了相对应的功能,希望对大家有所帮助。
老师要求我们学生做一套拍照身份验证系统,经过长时间的学习,有了这篇文章,希望能帮到读者们。 正文 首先介绍本文的主角:AForge 创建一个C#项目,引用必备的几个DLL AForge.dll AForge.Controls.dll AForge....
CameraAforge 编写的C# 调用摄像头的示例程序,供初学者使用学习。...功能:摄像头列表,摄像头分辨率 摄像头帧数,摄像头开启,摄像头关闭,拍照,实时显示等功能 框架:WindowForm 程序 =====华丽的分割线
CameraAforge 的姊妹篇,用OpenCV编写的C# 调用...功能:摄像头列表,摄像头分辨率 摄像头帧数,摄像头开启,摄像头关闭,拍照,实时显示等功能 框架:WindowForm 程序 , OpenCV =====华丽的分割线,后面的内容不用看
本文实例为大家分享了C#使用Aforge调用摄像头拍照的具体代码,供大家参考,具体内容如下 一、新建一个Winform项目 二、使用Nuget添加引用 安装下图中红色框住的两个程序包 安装完后发现安装了如下图的程序包,这是...
一个非常完整的开源C#摄像头开发包,包含摄像头设备的读取,图像的获取以及参数设置。 能够读取多个摄像头设备并允许随时切换。 能够根据指定的分辨率来从摄像头采集图像。 能够进行摄像头属性的设置,例如:亮度、...
登录后,输入1通道,即可查看预览,以及录像拍照,进行云台控制。 找了很多资料,都不能用。 偶然的机会找到了这个示例。可以调试,集成到自己的项目中,特别简单。 给需要在程序里集成摄像头的兄弟们一个很好的方案...
一个非常完整的开源C#摄像头开发包,包含摄像头设备的读取,图像的获取以及参数设置。 能够读取多个摄像头设备并允许随时切换。 能够根据指定的分辨率来从摄像头采集图像。 能够进行摄像头属性的设置,例如:亮度、...
基于C#的Aforge类调用简单示例,供大家参考,具体内容如下 由题,本程序是使用Aforge类库调用摄像头的demo。 功能: 1.预览 2.前后摄像头切换 1.判断是否有摄像头,无则提示 2.有,判断摄像头个数,有1个则...
大华平台SDK开发手册(linux版)
xamarin-forms-camera 在 Xamarin Forms 应用程序中使用设备相机检索图片的示例。 以下博客文章中描述了该实现 - 。