《C#用摄像头抓取图像.doc》由会员分享,可在线阅读,更多相关《C#用摄像头抓取图像.doc(4页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、【精品文档】如有侵权,请联系网站删除,仅供学习与交流C#用摄像头抓取图像.精品文档.C# 如何用摄像头抓取图像,如何把图像保存到硬盘 收藏 using System;using System.Runtime.InteropServices;using System.Drawing;using System.Drawing.Imaging;namespace WeightSystem/ / 一个控制摄像头的类/ public class Pick private const int WM_USER = 0x400; private const int WS_CHILD = 0x40000000;
2、 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_
3、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
4、_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_
5、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; public static int WM_CAP_DLG_VIDEOSOURCE = (WM_CAP_START + 42); /选择摄像头 private IntPtr hWndC; private bool bStat = false; private IntPtr mContro
6、lPtr; private int mWidth; private int mHeight; private int mLeft; private int mTop; / / 初始化摄像头 / / 控件的句柄 / 开始显示的左边距 / 开始显示的上边距 / 要显示的宽度 / 要显示的长度 public Pick(IntPtr handle, int left, int top, int width, int height) mControlPtr = handle; mWidth = width; mHeight = height; mLeft = left; mTop = top; DllI
7、mport(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(
8、User32.dll) private static extern bool SendMessage(IntPtr hWnd, int wMsg, int wParam, int lParam); / / 开始显示图像 / public void Start() if (bStat) return; bStat = true; byte lpszName = new byte100; hWndC = capCreateCaptureWindowA(lpszName, WS_CHILD | WS_VISIBLE, mLeft, mTop, mWidth, mHeight, mControlPtr
9、, 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); SendMess
10、age(hWndC, WM_CAP_SET_PREVIEWRATE, 66, 0); SendMessage(hWndC, WM_CAP_SET_OVERLAY, 1, 0); SendMessage(hWndC, WM_CAP_SET_PREVIEW, 1, 0); return; / / 停止显示 / public void Stop() SendMessage(hWndC, WM_CAP_DRIVER_DISCONNECT, 0, 0); bStat = false; / / 抓图 / / 要保存bmp文件的路径 public void GrabImage(string path) In
11、tPtr hBmp = Marshal.StringToHGlobalAnsi(path); SendMessage(hWndC, WM_CAP_SAVEDIB, 0, hBmp.ToInt32(); / / 录像 / / 要保存avi文件的路径 public void Kinescope(string path) IntPtr hBmp = Marshal.StringToHGlobalAnsi(path); SendMessage(hWndC, WM_CAP_FILE_SET_CAPTURE_FILEA, 0, hBmp.ToInt32(); SendMessage(hWndC, WM_C
12、AP_SEQUENCE, 0, 0); / / 停止录像 / public void StopKinescope() SendMessage(hWndC, WM_CAP_STOP, 0, 0); / / public void SetShow() SendMessage(hWndC, WM_CAP_DLG_VIDEOSOURCE, 0, 0);/把抓到的图像保存到硬盘 private void button3_Click(object sender, EventArgs e) try SaveFileDialog SaveFileDialog1=new SaveFileDialog(); Sa
13、veFileDialog1.Filter = bmp files (*.bmp)|*.bmp|jpg files (*.jpg)|*.jpg|All files (*.*)|*.*; SaveFileDialog1.FilterIndex = 2; /默认图片保存格式 JPG SaveFileDialog1.RestoreDirectory = true; SaveFileDialog1.FileName = Pic01; /默认图片保存名称 Pic01 if (SaveFileDialog1.ShowDialog() = DialogResult.OK) pk.GrabImage(SaveFileDialog1.FileName); catch本文来自CSDN博客,转载请标明出处: