C#实现控制摄像头的类

本文实例讲述了C#实现控制摄像头的类。分享给大家供大家参考。具体如下:

/// <summary>
/// 一个控制摄像头的类
/// </summary>
public class Pick
{
  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 Pick(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);
  /// <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#程序设计有所帮助。

(0)

相关推荐

  • C#实现操作MySql数据层类MysqlHelper实例

    本文实例讲述了C#实现操作MySql数据层类MysqlHelper.分享给大家供大家参考.具体如下: using System; using System.Data; using System.Configuration; using System.Collections.Generic; using System.Linq; using System.Text; using System.Xml.Linq; using MySql.Data; using MySql.Data.MySqlCli

  • 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 con

  • C#实现的调用DOS命令操作类实例

    本文实例讲述了C#实现的调用DOS命令操作类.分享给大家供大家参考.具体如下: /*********************************** * All Rights Reserved , Copyright (C) 2012 , EricHu. * 作 者: EricHu * 创建时间: 2012-5-4 15:29:35 ***********************************/ using System; using System.Diagnostics; usi

  • C#操作ftp类完整实例

    本文实例讲述了C#操作ftp类.分享给大家供大家参考.具体如下: using System; using System.Collections.Generic; using System.Text; using System.IO; using System.Net; using System.Globalization; namespace FtpTest1 { public class FtpWeb { string ftpServerIP; string ftpRemotePath; st

  • C#操作Access通用类实例

    本文实例讲述了C#操作Access通用类.分享给大家供大家参考.具体如下: using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using Syst

  • C#实现调用本机摄像头实例

    本文实例源自一个项目,其中需要调用本机的摄像头进行拍照,分享给大家供大家参考之用.具体步骤如下: 硬件环境:联想C360一体机,自带摄像头 编写环境:vs2010 语言:C# WPF 实现步骤: 下载AForge类库,并添加引用: using AForge; using AForge.Controls; using AForge.Video; using AForge.Video.DirectShow; using Size = System.Drawing.Size; 在xaml界面中添加Vi

  • C#实现IP摄像头的方法

    本文实例讲述了C#实现IP摄像头的方法.分享给大家供大家参考.具体实现方法如下: #region IP摄像头代码 /// <summary> /// ip摄像头代码 /// </summary> //视频 private IntPtr m_hChannel; private IntPtr m_hServer, phPlay; public delegate void MyInvoke(string str); public delegate void OutDelegate(Int

  • C#实现用于操作wav声音文件的类实例

    本文实例讲述了C#实现用于操作wav声音文件的类.分享给大家供大家参考.具体如下: 有了这个C#类,我们可以很轻易的调用本地wav文件进行同步播放或者异步播放,大大简化了对wav文件的操作过程,如果你需要在项目中调用wav文件进行声音播放,可以使用这个C#类. using System; using System.Media; namespace DotNet.Utilities { /// <summary> /// 处理多媒体的公共类 /// </summary> public

  • C#实现控制摄像头的类

    本文实例讲述了C#实现控制摄像头的类.分享给大家供大家参考.具体如下: /// <summary> /// 一个控制摄像头的类 /// </summary> public class Pick { private const int WM_USER = 0x400; private const int WS_CHILD = 0x40000000; private const int WS_VISIBLE = 0x10000000; private const int WM_CAP_

  • Android实现控制摄像头拍照

    现在的手机一般都会提供相机功能,有些相机的镜头甚至支持1300万以上像素,有些甚至支持独立对焦.光学变焦这些只有单反才有的功能,甚至有些手机直接宣传可以拍到星星.可以说手机已经变成了专业数码相机.为了充分利用手机上的相机功能, Android系统提供了Camera类来控制相机拍照.现在就让我们看一下如果使用Camera类来控制手机拍照. 使用Camera控制手机拍照的步骤如下:  1) 调用Camera的open()方法打开相机.该方法默认打开后置摄像头.如果需要打开指定摄像头,可以为该方法传入

  • 使用Python控制摄像头拍照并发邮件

    o1 前言 为什么会有写这个程序的想法呢? 最初的想法是写一个可以用电脑前置摄像头拍照的程序,在舍友使用你电脑的时候,不经意间获取到一大堆奇葩舍友的表情包. 然后我又突发奇想,要不搞个开机启动吧,这样我就可以看到是谁开启了我的电脑啦. 然后,突(nao)发(dong)奇(da)想(kai)的我又想到万一我电脑不在身边怎么办?要不再加个邮件发送机制吧,开机拍到照片再邮件发送给我?哈哈 02 工具 •deepin 15.9 •好看好用的国产linux系统 •python 2.7或者3.6 •解释器,

  • 如何使用Python控制摄像头录制视频

    导语: ​Python如何下载网页上的图片呢? 今天小编给大家分享另一个Python应用小程序,就是:用Python控制摄像头录制视频! 学会了也可以做一个属于自己的摄像头控制程序! 那么如何用Python编程来实现呢? 用Python代码实现照片阅读器功能,主要有7步: 第一步:导入需要的依赖库. 这里面主要用到三个库: (1)tkinter库:用于界面制作 (2)PIL库:用于图片处理 (3)cv2库:用于视频捕获 impor tcv2 impor ttkinter from PIL imp

  • 使用Python实现控制摄像头的方法详解

    目录 前言 第一部分:环境搭建 步骤一:安装 Python 步骤二:安装 OpenCV 步骤三:连接摄像头 第二部分:摄像头基本操作 1. 捕获视频帧 2.保存视频 总结 前言 当今,随着计算机技术的发展,摄像头已经成为了人们生活中不可或缺的一部分.而Python作为一种流行的编程语言,也可以轻松地控制和操作摄像头.无论你是想用Python写一个简单的摄像头应用程序,还是想在机器学习和计算机视觉项目中使用摄像头,Python都可以帮助你实现.本文将介绍如何使用Python中的常用库(例如Open

  • C#获取摄像头拍照显示图像的方法

    本文实例为大家分享了C#获取摄像头拍照显示图像的具体代码,供大家参考,具体内容如下 概述 之前有个需求,就是在web界面可以实现调用摄像头,用户把手机的个人二维码展示给摄像头,摄像头进行摄像识别用户. 其实本质就是保存图像二维码,在进行二维码识别. 下面来看看如何实现. 主要代码实现 1.初始化摄像头 /// <summary>         /// 初始化摄像头         /// </summary>         /// <param name="ha

  • C#通过Semaphore类控制线程队列的方法

    本文实例讲述了C#通过Semaphore类控制线程队列的方法.分享给大家供大家参考.具体实现方法如下: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; using System.Diagnostics; using System.Threading; using System.ComponentModel; using System.Col

  • Python控制自己的手机摄像头拍照并自动发送到邮箱案例讲解

    目录 前言 思路 开始代码 工具导入 调用摄像头,保存图片 邮件端口设置 发送邮件功能 进行封装 运行代码,演示效果 前言 今天这个案例,就是控制自己的摄像头拍照,并且把拍下来的照片,通过邮件发到自己的邮箱里.想完成今天的这个案例,只要记住一个重点:你需要一个摄像头 思路 通过opencv调用摄像头拍照保存图像本地用email库构造邮件内容,保存的图像以附件形式插入邮件内容用smtplib库发送邮件到指定邮箱 开始代码 工具导入 import time import cv2 # pip inst

  • PHP基于Closure类创建匿名函数的方法详解

    本文实例讲述了PHP基于Closure类创建匿名函数的方法.分享给大家供大家参考,具体如下: Closure 类 用于代表匿名函数的类. 匿名函数(在 PHP 5.3 中被引入)会产生这个类型的对象.在过去,这个类被认为是一个实现细节,但现在可以依赖它做一些事情.自 PHP 5.4 起,这个类带有一些方法,允许在匿名函数创建后对其进行更多的控制. 这个类不能实例化,里面主要有两个方法,都用来复制闭包,一个静态一个动态,下面分别详细讲解下这两个不好理解的方法. Closure::bind publ

  • 详解Android应用开发中Scroller类的屏幕滑动功能运用

    今天给大家介绍下Android中滑屏功能的一个基本实现过程以及原理初探,最后给大家重点讲解View视图中scrollTo 与scrollBy这两个函数的区别 .   首先 ,我们必须明白在Android View视图是没有边界的,Canvas是没有边界的,只不过我们通过绘制特定的View时对Canvas对象进行了一定的操作,例如 : translate(平移).clipRect(剪切)等,以便达到我们的对该Canvas对象绘制的要求 ,我们可以将这种无边界的视图称为"视图坐标"----

随机推荐