Delphi - 利用DLL编程控制摄像头实现拍照、录制视频
时间:2019-09-20
本文章向大家介绍Delphi - 利用DLL编程控制摄像头实现拍照、录制视频,主要包括Delphi - 利用DLL编程控制摄像头实现拍照、录制视频使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
Delphi利用avicap32.dll编程控制摄像头实现拍照、录制视频
项目需求:平板电脑(Windows系统)一维/二维码扫描功能;
需求分析:
需要扫描一维/二维码时,分两步实现。
第一步,avicap32.dll或者dspack技术实现静默打开摄像头拍照、保存BMP图片。
第二步,ZXing技术实现对一维/二维码的解析,最终获取到码值。
本篇是利用avicap32.dll技术实现拍照/录制视频的测试Demo。
请看代码:
1 unit uMain; 2 3 interface 4 5 uses 6 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 7 Dialogs, ExtCtrls, StdCtrls, RzPanel, RzButton; 8 9 type 10 TFrmMain = class(TForm) 11 gbScreen: TRzGroupBox; 12 gbOperation: TRzGroupBox; 13 btnStart: TRzBitBtn; 14 btnStop: TRzBitBtn; 15 btnSaveBMP: TRzBitBtn; 16 btnStartR: TRzBitBtn; 17 btnSaveAVI: TRzBitBtn; 18 pMain: TPanel; 19 procedure btnStartClick(Sender: TObject); 20 procedure FormClose(Sender: TObject; var Action: TCloseAction); 21 procedure btnStopClick(Sender: TObject); 22 procedure btnSaveBMPClick(Sender: TObject); 23 procedure btnStartRClick(Sender: TObject); 24 procedure btnSaveAVIClick(Sender: TObject); 25 private 26 { Private declarations } 27 hWndC: THandle; 28 public 29 { Public declarations } 30 end; 31 32 var 33 FrmMain: TFrmMain; 34 const WM_CAP_START = WM_USER; 35 const WM_CAP_STOP = WM_CAP_START + 68; 36 const WM_CAP_DRIVER_CONNECT = WM_CAP_START + 10; 37 const WM_CAP_DRIVER_DISCONNECT = WM_CAP_START + 11; 38 const WM_CAP_SAVEDIB = WM_CAP_START + 25; 39 const WM_CAP_GRAB_FRAME = WM_CAP_START + 60; 40 const WM_CAP_SEQUENCE = WM_CAP_START + 62; 41 const WM_CAP_FILE_SET_CAPTURE_FILEA = WM_CAP_START + 20; 42 const WM_CAP_SEQUENCE_NOFILE = WM_CAP_START + 63; 43 const WM_CAP_SET_OVERLAY = WM_CAP_START + 51; 44 const WM_CAP_SET_PREVIEW = WM_CAP_START + 50; 45 const WM_CAP_SET_CALLBACK_VIDEOSTREAM = WM_CAP_START + 6; 46 const WM_CAP_SET_CALLBACK_ERROR = WM_CAP_START + 2; 47 const WM_CAP_SET_CALLBACK_STATUSA = WM_CAP_START + 3; 48 const WM_CAP_SET_CALLBACK_FRAME = WM_CAP_START + 5; 49 const WM_CAP_SET_SCALE = WM_CAP_START + 53; 50 const WM_CAP_SET_PREVIEWRATE = WM_CAP_START + 52; 51 52 function capCreateCaptureWindowA(lpszWindowName: PCHAR; 53 dwStyle: longint; x: integer; y: integer; nWidth: integer; 54 nHeight: integer; ParentWin: HWND; nId: integer): HWND; 55 STDCALL EXTERNAL 'AVICAP32.DLL'; 56 57 implementation 58 59 {$R *.dfm} 60 61 procedure TFrmMain.btnStartClick(Sender: TObject); 62 begin 63 //开始拍摄 64 hWndC := capCreateCaptureWindowA('My Own Capture Window', WS_CHILD or WS_VISIBLE, pMain.Left, pMain.Top, pMain.Width, pMain.Height, FrmMain.Handle, 0); 65 if hWndC <> 0 then 66 begin 67 SendMessage(hWndC, WM_CAP_SET_CALLBACK_VIDEOSTREAM, 0, 0); 68 SendMessage(hWndC, WM_CAP_SET_CALLBACK_ERROR, 0, 0); 69 SendMessage(hWndC, WM_CAP_SET_CALLBACK_STATUSA, 0, 0); 70 SendMessage(hWndC, WM_CAP_DRIVER_CONNECT, 0, 0); 71 SendMessage(hWndC, WM_CAP_SET_SCALE, 1, 0); 72 SendMessage(hWndC, WM_CAP_SET_PREVIEWRATE, 66, 0); 73 SendMessage(hWndC, WM_CAP_SET_OVERLAY, 1, 0); 74 SendMessage(hWndC, WM_CAP_SET_PREVIEW, 1, 0); 75 end; 76 end; 77 78 procedure TFrmMain.FormClose(Sender: TObject; var Action: TCloseAction); 79 begin 80 //程序退出时,自动关闭摄像头 81 if hWndC <> 0 then 82 begin 83 SendMessage(hWndC, WM_CAP_DRIVER_DISCONNECT, 0, 0); 84 end; 85 end; 86 87 procedure TFrmMain.btnStopClick(Sender: TObject); 88 begin 89 //关闭摄像头 90 if hWndC <> 0 then 91 begin 92 SendMessage(hWndC, WM_CAP_DRIVER_DISCONNECT, 0, 0); 93 hWndC := 0; 94 end; 95 end; 96 97 procedure TFrmMain.btnSaveBMPClick(Sender: TObject); 98 begin 99 //保存BMP 100 if hWndC <> 0 then 101 begin 102 SendMessage(hWndC, WM_CAP_SAVEDIB, 0, longint(pchar('D:/1.bmp'))); 103 end; 104 end; 105 106 procedure TFrmMain.btnStartRClick(Sender: TObject); 107 begin 108 //开始录制AVI视频 109 if hWndC <> 0 then 110 begin 111 SendMessage(hWndC, WM_CAP_FILE_SET_CAPTURE_FILEA, 0, Longint(pchar('c:/test.avi'))); 112 SendMessage(hWndC, WM_CAP_SEQUENCE, 0, 0); 113 end; 114 end; 115 116 procedure TFrmMain.btnSaveAVIClick(Sender: TObject); 117 begin 118 //停止录制并保存AVI视频 119 if hWndC <> 0 then 120 begin 121 SendMessage(hWndC, WM_CAP_STOP, 0, 0); 122 end; 123 end; 124 125 end.
运行效果:
原文地址:https://www.cnblogs.com/jeremywucnblog/p/11554872.html
- Log4j官方文档翻译(六、日志的级别)
- AngularJS API之isXXX()
- 《linux c编程指南》学习手记4
- Kibana中doc与search策略的区别
- jQuery 图片查看插件 Magnify 开发简介(仿 Windows 照片查看器)
- Log4j官方文档翻译(五、日志输出的方法)
- AngularJS API之copy深拷贝
- 光标定位,隐藏光标
- AngularJS API之toJson 对象转为JSON
- Log4j官方文档翻译(七、日志格式化)
- Log4j官方文档翻译(八、文件输出)
- 《linux c编程指南》学习手记3
- Log4j官方文档翻译(九、输出到数据库)
- Redis初级介绍
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- python实现语音在线合成,让你的小说自己念给你听
- Python爬虫实战:模拟登录淘宝网站
- Python制作动态二维码(附源码,复制再贴修改路径名字即可)
- 新手小白的福利,零基础也能上手的项目——学生信息管理系统
- Python制作小脚本,一键可以让你同事的电脑在你指定时间关机
- Python小白爬虫入门的第一个案例:爬取全站小说
- Python基础入门知识点——字符串的介绍
- 文章要保存为TXT文件,其中的图片要怎么办?Python帮你解决
- 分析B站弹幕,川普同志暴露的那一天,没有一个鬼畜up是无辜的
- python-爬取地理坐标
- Python基础第一个案例:猜数字游戏,这个都写不出,那就放弃吧
- 现在听歌要各大平台到处跑,嫌麻烦?制作个人专属的音乐下载器
- 爬取上市公司数据、分析数据,并用可视化现实全国各地区公司数量
- 今天刚上手爬虫,当然要从最简单的开始啦,验证一下所学的知识
- Python数据可视化入门:使用Matplotlib绘图