C#USB录像视频拍照-代码
论坛帖:http://bbs.csdn.net/topics/390536016
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Runtime.InteropServices;
- using System.Text;
- namespace Video
- {
- public class VideoControl
- {
- //导入API函数
- [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, int lParam);
- //常量设置
- 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 const int WM_CAP_FILE_SAVEAS = WM_CAP_START + 23; //将捕捉文件保存为另一个用户指定的文件。这个消息不会改变捕捉文件的名字和内容,
- //全局变量
- 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 VideoControl(IntPtr handle, int left, int top, int width, int height)
- {
- mControlPtr = handle;
- mWidth = width;
- mHeight = height;
- mLeft = left;
- mTop = top;
- }
- /// <summary>
- /// 打开视频
- /// </summary>
- public void StartVideo()
- {
- if (bWorkStart)
- return;
- bWorkStart = 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, 100, 0);
- SendMessage(hWndC, WM_CAP_SET_OVERLAY, 1, 0);
- SendMessage(hWndC, WM_CAP_SET_PREVIEW, 1, 0);
- }
- }
- /// <summary>
- /// 关闭视频
- /// </summary>
- public void StopVideo()
- {
- SendMessage(hWndC, WM_CAP_DRIVER_DISCONNECT, 0, 0);
- bWorkStart = false;
- }
- /// <summary>
- /// 开始录像
- /// </summary>
- /// <param name="path">要保存录像的路径</param>
- public void StarKinescope(string path)
- {
- IntPtr hBmp = Marshal.StringToHGlobalAnsi(path);
- SendMessage(hWndC, WM_CAP_FILE_SET_CAPTURE_FILEA, 0, hBmp.ToInt32());
- SendMessage(hWndC, WM_CAP_SEQUENCE, 0, 0);
- }
- /// <summary>
- /// 停止录像
- /// </summary>
- public void StopKinescope()
- {
- SendMessage(hWndC, WM_CAP_STOP, 0, 0);
- }
- /// <summary>
- /// 拍照
- /// </summary>
- /// <param name="path">文件路径</param>
- public void Images(string path)
- {
- IntPtr imagePath = Marshal.StringToHGlobalAnsi(path);
- SendMessage(hWndC, WM_CAP_SAVEDIB, 0, imagePath.ToInt32());
- }
- }
- }
C#USB录像视频拍照-代码的更多相关文章
- php实现视频拍照上传头像功能实例代码
如果要在php中实现视频拍照我们需要借助于flash插件了,由flash拍出的确照片我们再通过php的$GLOBALS ['HTTP_RAW_POST_DATA']接受数据,然后保存成图片就可以了,下 ...
- ABP架构设计交流群-上海线下交流会的内容分享(有高清录像视频的链接)
点这里进入ABP系列文章总目录 ABP架构设计交流群-7月18日上海线下交流会内容分享 因为最近工作特别忙,很久没有更新博客了,真对不起关注我博客和ABP系列文章的朋友! 原计划在7月11日举行的AB ...
- Android拍照、录像、录音代码范例
<p>import java.io.File; import java.text.SimpleDateFormat; import java.util.Date; import andro ...
- .net利用本地播放器播放视频文件代码
前台点击按钮,执行js事件,跳转到后台代码: function funShowVideo(index) { var iTop = (window.screen.availHeig ...
- Android 拍照 代码实例
------- 源自梦想.永远是你IT事业的好友.只是勇敢地说出我学到! ---------- 这是我做的一个简单的利用Android手机的摄像头进行拍照的实例. 在这里我实现了基本的拍照.照片的存储 ...
- qq视频api代码
<!--视频容器--> <div id="mod_player"></div> <!--腾讯视频代码开始--> <scri ...
- OpenCv调用摄像头拍照代码
近期在研究OpenCv对摄像头的调用.现将代码贴出,供大家批评指正. 1.申明 #include"./opencv2/opencv.hpp" #ifdef _DEBUG #prag ...
- 基于 Android 的 3D 视频示例代码
笔者:Mark Liu 下载样本代码 简单介绍 在Android 中,创建一个可以播放视频剪辑的应用很easy:创建一个採用 3D 图形平面的游戏应用也很easy.可是,创建一个可以在 3D 图形对象 ...
- 基于 Android 的 3D 视频样本代码
作者:Mark Liu 下载样本代码 简单介绍 在Android 中,创建一个可以播放视频剪辑的应用很easy:创建一个採用 3D 图形平面的游戏应用也很easy.可是,创建一个可以在 3D 图形对象 ...
随机推荐
- MyBatis 错误日志检索
当怀疑是sql语句执行存在错误时,可以用一下关键字检索日志文件: 检索关键字: Cause: SQLException sql原始报错内容: [DEBUG] [2016-05-03 09:37:05 ...
- 破解ZendStudio 10.1
破解文件的网盘地址: http://pan.baidu.com/share/link?shareid=3562282358&uk=1543766223
- Struts2 学习笔记 09 访问Web元素
我们想要访问Map类型request,session,application.真实类型HttpServletRequest,HttpSession,ServletContext的引用,并对它们进行操作 ...
- Step by Step 設定 TFS 2012 Create Team Project 權限 - 避免 TF218017、TF250044
基本上權限的設定和 以往的 TFS 沒有什麼太大的差別 只是這次的權限設定畫面有略作些調整,我還是一併整理一下 當我們用 TFSSetup 的帳號安裝完 TFS 2012 後 想要在自已的電腦上用自已 ...
- RTMP协议发送H.264编码及AAC编码的音视频,实现摄像头直播
RTMP(Real Time Messaging Protocol)是专门用来传输音视频数据的流媒体协议,最初由Macromedia 公司创建,后来归Adobe公司所有,是一种私有协议,主要用来联系F ...
- 内核镜像zImage是如何生成的
转载:内核镜像zImage是如何生成的 内核镜像zImage是如何生成的 前面两篇文章介绍了vmlinux 文件生成,这个文件必然是核心的linux内核,但是它是ELF格式的文件,其中包含了可执行的二 ...
- SSM框架中出现的几种注解的理解
转自IT·达人原文 Spring5:@Autowired注解.@Resource注解和@Service注解,有删改. 传统的Spring做法是使用.xml文件来对bean进行注入或者是配置aop.事物 ...
- HTTP和HTTPS的区别,以及各自的优缺点
转自 https://www.cnblogs.com/wqhwe/p/5407468.html 超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息,HTTP协议以明文方式发送内容 ...
- 【mybatis】在mybatis分页查询时,主表对关联表 一对多 分页查询怎么实现
现在有这样一个需求: 1.积分商品分页查询 2.一个积分商品会有多张商品图片在商品图片表 1:n的关系 这样在积分商品分页查询的时候,想要顺便把每个积分商品对应的商品图片信息也带出来 实现如下: 1 ...
- DCI:DCI学习总结
备注 之前把DCI的Role和四色原型的Role给弄混了,本文也不会比较这两种Role的区别(后面有机会再说),这里简单的记录一下对DCI的理解. 参考文章:http://www.cnblogs.co ...