日期:2014-05-18 浏览次数:21027 次
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; using System.Runtime.InteropServices; namespace Temp { public partial class frmCamera : Form { public frmCamera() { InitializeComponent(); pcc = new Camera.PCCamera(this.panelCamera.Handle, 0, 0, 320, 240); } private Camera.PCCamera pcc; //开始 private void btnStart_Click(object sender, EventArgs e) { pcc.Start(); } //停止 private void btnStop_Click(object sender, EventArgs e) { pcc.Stop(); } //截图 private void btnSaveImage_Click(object sender, EventArgs e) { Application.DoEvents(); pcc.GrabImage("c:\\" + System.DateTime.Now.ToString("yyyyMMddHHmmss") + ".jpg"); } //录像 private void btnKinescope_Click(object sender, EventArgs e) { pcc.Kinescope("c:\\" + System.DateTime.Now.ToString("yyyyMMddHHmmss") + ".avi"); } //停止录像 private void btnStopKinescope_Click(object sender, EventArgs e) { Application.DoEvents(); pcc.StopKinescope(); } } } namespace Camera { /// <summary> /// 一个控制摄像头的类 /// </summary> public class PCCamera { 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 IntPtr mControlPtr; private bool bWorkStart = false; 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 PCCamera(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 capCreateCaptur