论坛帖:http://bbs.csdn.net/topics/390536016

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Runtime.InteropServices;
  5. using System.Text;
  6.  
  7. namespace Video
  8. {
  9. public class VideoControl
  10. {
  11. //导入API函数
  12. [DllImport("avicap32.dll")]
  13. private static extern IntPtr capCreateCaptureWindowA(byte[] lpszWindowName, int dwStyle, int x, int y, int nWidth, int nHeight, IntPtr hWndParent, int nID);
  14.  
  15. [DllImport("avicap32.dll")]
  16. private static extern int capGetVideoFormat(IntPtr hWnd, IntPtr psVideoFormat, int wSize);
  17.  
  18. [DllImport("User32.dll")]
  19. private static extern bool SendMessage(IntPtr hWnd, int wMsg, int wParam, int lParam);
  20.  
  21. //常量设置
  22. private const int WM_USER = 0x400;
  23.  
  24. private const int WS_CHILD = 0x40000000;
  25. private const int WS_VISIBLE = 0x10000000;
  26. private const int WM_CAP_START = WM_USER;
  27. private const int WM_CAP_STOP = WM_CAP_START + 68;
  28. private const int WM_CAP_DRIVER_CONNECT = WM_CAP_START + 10;
  29. private const int WM_CAP_DRIVER_DISCONNECT = WM_CAP_START + 11;
  30. private const int WM_CAP_SAVEDIB = WM_CAP_START + 25;
  31. private const int WM_CAP_GRAB_FRAME = WM_CAP_START + 60;
  32. private const int WM_CAP_SEQUENCE = WM_CAP_START + 62;
  33. private const int WM_CAP_FILE_SET_CAPTURE_FILEA = WM_CAP_START + 20;
  34. private const int WM_CAP_SEQUENCE_NOFILE = WM_CAP_START + 63;
  35. private const int WM_CAP_SET_OVERLAY = WM_CAP_START + 51;
  36. private const int WM_CAP_SET_PREVIEW = WM_CAP_START + 50;
  37. private const int WM_CAP_SET_CALLBACK_VIDEOSTREAM = WM_CAP_START + 6;
  38. private const int WM_CAP_SET_CALLBACK_ERROR = WM_CAP_START + 2;
  39. private const int WM_CAP_SET_CALLBACK_STATUSA = WM_CAP_START + 3;
  40. private const int WM_CAP_SET_CALLBACK_FRAME = WM_CAP_START + 5;
  41. private const int WM_CAP_SET_SCALE = WM_CAP_START + 53;
  42. private const int WM_CAP_SET_PREVIEWRATE = WM_CAP_START + 52;
  43. private const int WM_CAP_FILE_SAVEAS = WM_CAP_START + 23; //将捕捉文件保存为另一个用户指定的文件。这个消息不会改变捕捉文件的名字和内容,
  44.  
  45. //全局变量
  46. private IntPtr hWndC; //句柄
  47.  
  48. private IntPtr mControlPtr; //句柄
  49. private bool bWorkStart = false;
  50. private int mWidth;  //视频显示宽度
  51. private int mHeight; //视频显示高度
  52. private int mLeft; //视频显示左边距
  53. private int mTop; //视频显示上边距
  54.  
  55. /// <summary>
  56. /// 初始化显示图像
  57. /// </summary>
  58. /// <param name="handle">播放视频控件的句柄</param>
  59. /// <param name="left">视频显示的左边距</param>
  60. /// <param name="top">视频显示的上边距</param>
  61. /// <param name="width">要显示视频的宽度</param>
  62. /// <param name="height">要显示视频的长度</param>
  63. public VideoControl(IntPtr handle, int left, int top, int width, int height)
  64. {
  65. mControlPtr = handle;
  66. mWidth = width;
  67. mHeight = height;
  68. mLeft = left;
  69. mTop = top;
  70. }
  71.  
  72. /// <summary>
  73. /// 打开视频
  74. /// </summary>
  75. public void StartVideo()
  76. {
  77. if (bWorkStart)
  78. return;
  79. bWorkStart = true;
  80. byte[] lpszName = new byte[100];
  81.  
  82. //创建播放窗口
  83. hWndC = capCreateCaptureWindowA(lpszName, WS_CHILD | WS_VISIBLE, mLeft, mTop, mWidth, mHeight, mControlPtr, 0);
  84.  
  85. if (hWndC.ToInt32() != 0)
  86. {
  87. //显示视频
  88. SendMessage(hWndC, WM_CAP_SET_CALLBACK_VIDEOSTREAM, 0, 0);
  89. SendMessage(hWndC, WM_CAP_SET_CALLBACK_ERROR, 0, 0);
  90. SendMessage(hWndC, WM_CAP_SET_CALLBACK_STATUSA, 0, 0);
  91. SendMessage(hWndC, WM_CAP_DRIVER_CONNECT, 0, 0);
  92. SendMessage(hWndC, WM_CAP_SET_SCALE, 1, 0);
  93. SendMessage(hWndC, WM_CAP_SET_PREVIEWRATE, 100, 0);
  94. SendMessage(hWndC, WM_CAP_SET_OVERLAY, 1, 0);
  95. SendMessage(hWndC, WM_CAP_SET_PREVIEW, 1, 0);
  96. }
  97. }
  98.  
  99. /// <summary>
  100. /// 关闭视频
  101. /// </summary>
  102. public void StopVideo()
  103. {
  104. SendMessage(hWndC, WM_CAP_DRIVER_DISCONNECT, 0, 0);
  105. bWorkStart = false;
  106. }
  107.  
  108. /// <summary>
  109. /// 开始录像
  110. /// </summary>
  111. /// <param name="path">要保存录像的路径</param>
  112. public void StarKinescope(string path)
  113. {
  114. IntPtr hBmp = Marshal.StringToHGlobalAnsi(path);
  115. SendMessage(hWndC, WM_CAP_FILE_SET_CAPTURE_FILEA, 0, hBmp.ToInt32());
  116. SendMessage(hWndC, WM_CAP_SEQUENCE, 0, 0);
  117. }
  118.  
  119. /// <summary>
  120. /// 停止录像
  121. /// </summary>
  122. public void StopKinescope()
  123. {
  124. SendMessage(hWndC, WM_CAP_STOP, 0, 0);
  125. }
  126.  
  127. /// <summary>
  128. /// 拍照
  129. /// </summary>
  130. /// <param name="path">文件路径</param>
  131. public void Images(string path)
  132. {
  133. IntPtr imagePath = Marshal.StringToHGlobalAnsi(path);
  134. SendMessage(hWndC, WM_CAP_SAVEDIB, 0, imagePath.ToInt32());
  135. }
  136. }
  137. }

  

C#USB录像视频拍照-代码的更多相关文章

  1. php实现视频拍照上传头像功能实例代码

    如果要在php中实现视频拍照我们需要借助于flash插件了,由flash拍出的确照片我们再通过php的$GLOBALS ['HTTP_RAW_POST_DATA']接受数据,然后保存成图片就可以了,下 ...

  2. ABP架构设计交流群-上海线下交流会的内容分享(有高清录像视频的链接)

    点这里进入ABP系列文章总目录 ABP架构设计交流群-7月18日上海线下交流会内容分享 因为最近工作特别忙,很久没有更新博客了,真对不起关注我博客和ABP系列文章的朋友! 原计划在7月11日举行的AB ...

  3. Android拍照、录像、录音代码范例

    <p>import java.io.File; import java.text.SimpleDateFormat; import java.util.Date; import andro ...

  4. .net利用本地播放器播放视频文件代码

    前台点击按钮,执行js事件,跳转到后台代码: function funShowVideo(index) {            var iTop = (window.screen.availHeig ...

  5. Android 拍照 代码实例

    ------- 源自梦想.永远是你IT事业的好友.只是勇敢地说出我学到! ---------- 这是我做的一个简单的利用Android手机的摄像头进行拍照的实例. 在这里我实现了基本的拍照.照片的存储 ...

  6. qq视频api代码

    <!--视频容器--> <div id="mod_player"></div>   <!--腾讯视频代码开始--> <scri ...

  7. OpenCv调用摄像头拍照代码

    近期在研究OpenCv对摄像头的调用.现将代码贴出,供大家批评指正. 1.申明 #include"./opencv2/opencv.hpp" #ifdef _DEBUG #prag ...

  8. 基于 Android 的 3D 视频示例代码

    笔者:Mark Liu 下载样本代码 简单介绍 在Android 中,创建一个可以播放视频剪辑的应用很easy:创建一个採用 3D 图形平面的游戏应用也很easy.可是,创建一个可以在 3D 图形对象 ...

  9. 基于 Android 的 3D 视频样本代码

    作者:Mark Liu 下载样本代码 简单介绍 在Android 中,创建一个可以播放视频剪辑的应用很easy:创建一个採用 3D 图形平面的游戏应用也很easy.可是,创建一个可以在 3D 图形对象 ...

随机推荐

  1. MyBatis 错误日志检索

    当怀疑是sql语句执行存在错误时,可以用一下关键字检索日志文件: 检索关键字: Cause: SQLException sql原始报错内容: [DEBUG] [2016-05-03 09:37:05 ...

  2. 破解ZendStudio 10.1

    破解文件的网盘地址: http://pan.baidu.com/share/link?shareid=3562282358&uk=1543766223  

  3. Struts2 学习笔记 09 访问Web元素

    我们想要访问Map类型request,session,application.真实类型HttpServletRequest,HttpSession,ServletContext的引用,并对它们进行操作 ...

  4. Step by Step 設定 TFS 2012 Create Team Project 權限 - 避免 TF218017、TF250044

    基本上權限的設定和 以往的 TFS 沒有什麼太大的差別 只是這次的權限設定畫面有略作些調整,我還是一併整理一下 當我們用 TFSSetup 的帳號安裝完 TFS 2012 後 想要在自已的電腦上用自已 ...

  5. RTMP协议发送H.264编码及AAC编码的音视频,实现摄像头直播

    RTMP(Real Time Messaging Protocol)是专门用来传输音视频数据的流媒体协议,最初由Macromedia 公司创建,后来归Adobe公司所有,是一种私有协议,主要用来联系F ...

  6. 内核镜像zImage是如何生成的

    转载:内核镜像zImage是如何生成的 内核镜像zImage是如何生成的 前面两篇文章介绍了vmlinux 文件生成,这个文件必然是核心的linux内核,但是它是ELF格式的文件,其中包含了可执行的二 ...

  7. SSM框架中出现的几种注解的理解

    转自IT·达人原文 Spring5:@Autowired注解.@Resource注解和@Service注解,有删改. 传统的Spring做法是使用.xml文件来对bean进行注入或者是配置aop.事物 ...

  8. HTTP和HTTPS的区别,以及各自的优缺点

    转自  https://www.cnblogs.com/wqhwe/p/5407468.html 超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息,HTTP协议以明文方式发送内容 ...

  9. 【mybatis】在mybatis分页查询时,主表对关联表 一对多 分页查询怎么实现

    现在有这样一个需求: 1.积分商品分页查询 2.一个积分商品会有多张商品图片在商品图片表  1:n的关系 这样在积分商品分页查询的时候,想要顺便把每个积分商品对应的商品图片信息也带出来 实现如下: 1 ...

  10. DCI:DCI学习总结

    备注 之前把DCI的Role和四色原型的Role给弄混了,本文也不会比较这两种Role的区别(后面有机会再说),这里简单的记录一下对DCI的理解. 参考文章:http://www.cnblogs.co ...