Delphi - 利用DLL编程控制摄像头实现拍照、录制视频
Delphi利用avicap32.dll编程控制摄像头实现拍照、录制视频
项目需求:平板电脑(Windows系统)一维/二维码扫描功能;
需求分析:
需要扫描一维/二维码时,分两步实现。
第一步,avicap32.dll或者dspack技术实现静默打开摄像头拍照、保存BMP图片。
第二步,ZXing技术实现对一维/二维码的解析,最终获取到码值。
本篇是利用avicap32.dll技术实现拍照/录制视频的测试Demo。
请看代码:
unit uMain; interface uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, RzPanel, RzButton; type
TFrmMain = class(TForm)
gbScreen: TRzGroupBox;
gbOperation: TRzGroupBox;
btnStart: TRzBitBtn;
btnStop: TRzBitBtn;
btnSaveBMP: TRzBitBtn;
btnStartR: TRzBitBtn;
btnSaveAVI: TRzBitBtn;
pMain: TPanel;
procedure btnStartClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure btnStopClick(Sender: TObject);
procedure btnSaveBMPClick(Sender: TObject);
procedure btnStartRClick(Sender: TObject);
procedure btnSaveAVIClick(Sender: TObject);
private
{ Private declarations }
hWndC: THandle;
public
{ Public declarations }
end; var
FrmMain: TFrmMain;
const WM_CAP_START = WM_USER;
const WM_CAP_STOP = WM_CAP_START + ;
const WM_CAP_DRIVER_CONNECT = WM_CAP_START + ;
const WM_CAP_DRIVER_DISCONNECT = WM_CAP_START + ;
const WM_CAP_SAVEDIB = WM_CAP_START + ;
const WM_CAP_GRAB_FRAME = WM_CAP_START + ;
const WM_CAP_SEQUENCE = WM_CAP_START + ;
const WM_CAP_FILE_SET_CAPTURE_FILEA = WM_CAP_START + ;
const WM_CAP_SEQUENCE_NOFILE = WM_CAP_START + ;
const WM_CAP_SET_OVERLAY = WM_CAP_START + ;
const WM_CAP_SET_PREVIEW = WM_CAP_START + ;
const WM_CAP_SET_CALLBACK_VIDEOSTREAM = WM_CAP_START + ;
const WM_CAP_SET_CALLBACK_ERROR = WM_CAP_START + ;
const WM_CAP_SET_CALLBACK_STATUSA = WM_CAP_START + ;
const WM_CAP_SET_CALLBACK_FRAME = WM_CAP_START + ;
const WM_CAP_SET_SCALE = WM_CAP_START + ;
const WM_CAP_SET_PREVIEWRATE = WM_CAP_START + ; function capCreateCaptureWindowA(lpszWindowName: PCHAR;
dwStyle: longint; x: integer; y: integer; nWidth: integer;
nHeight: integer; ParentWin: HWND; nId: integer): HWND;
STDCALL EXTERNAL 'AVICAP32.DLL'; implementation {$R *.dfm} procedure TFrmMain.btnStartClick(Sender: TObject);
begin
//开始拍摄
hWndC := capCreateCaptureWindowA('My Own Capture Window', WS_CHILD or WS_VISIBLE, pMain.Left, pMain.Top, pMain.Width, pMain.Height, FrmMain.Handle, );
if hWndC <> then
begin
SendMessage(hWndC, WM_CAP_SET_CALLBACK_VIDEOSTREAM, , );
SendMessage(hWndC, WM_CAP_SET_CALLBACK_ERROR, , );
SendMessage(hWndC, WM_CAP_SET_CALLBACK_STATUSA, , );
SendMessage(hWndC, WM_CAP_DRIVER_CONNECT, , );
SendMessage(hWndC, WM_CAP_SET_SCALE, , );
SendMessage(hWndC, WM_CAP_SET_PREVIEWRATE, , );
SendMessage(hWndC, WM_CAP_SET_OVERLAY, , );
SendMessage(hWndC, WM_CAP_SET_PREVIEW, , );
end;
end; procedure TFrmMain.FormClose(Sender: TObject; var Action: TCloseAction);
begin
//程序退出时,自动关闭摄像头
if hWndC <> then
begin
SendMessage(hWndC, WM_CAP_DRIVER_DISCONNECT, , );
end;
end; procedure TFrmMain.btnStopClick(Sender: TObject);
begin
//关闭摄像头
if hWndC <> then
begin
SendMessage(hWndC, WM_CAP_DRIVER_DISCONNECT, , );
hWndC := ;
end;
end; procedure TFrmMain.btnSaveBMPClick(Sender: TObject);
begin
//保存BMP
if hWndC <> then
begin
SendMessage(hWndC, WM_CAP_SAVEDIB, , longint(pchar('D:/1.bmp')));
end;
end; procedure TFrmMain.btnStartRClick(Sender: TObject);
begin
//开始录制AVI视频
if hWndC <> then
begin
SendMessage(hWndC, WM_CAP_FILE_SET_CAPTURE_FILEA, , Longint(pchar('c:/test.avi')));
SendMessage(hWndC, WM_CAP_SEQUENCE, , );
end;
end; procedure TFrmMain.btnSaveAVIClick(Sender: TObject);
begin
//停止录制并保存AVI视频
if hWndC <> then
begin
SendMessage(hWndC, WM_CAP_STOP, , );
end;
end; end.
运行效果:

作者:Jeremy.Wu
出处:https://www.cnblogs.com/jeremywucnblog/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
Delphi - 利用DLL编程控制摄像头实现拍照、录制视频的更多相关文章
- delphi中DLL编程详解
10.1 Windows的动态链接库原理 动态链接库(DLLs)是从C语言函数库和Pascal库单元的概念发展而来的.所有的C语言标准库函数都存放在某一函数库中,同时用户也可以用LIB程序创建自己的函 ...
- Delphi下DLL编程知识(转)
一. DLL和系统变量 在 System 单元声明的变量中,有几个对DLL编程有特殊影响.IsLibrary 可以检测代码是执行在应用程序中还是执行在DLL中,在应用程序中 IsLibrar ...
- 利用Delphi编程控制摄像头(图)
你的电脑有没有摄像头?看到别人用QQ玩视屏你会不会去想怎么实现的?这里介绍使用DELPHI使用MS的 AVICAP32.DLL就可轻松的实现对摄像头编程,如果再加上你的网络编程水平,实现一个视屏聊天就 ...
- WinForm利用AForge.NET调用电脑摄像头进行拍照和视频
当然了,你需要去官网下载类库,http://www.aforgenet.com/ 调用本机摄像头常用的组件: AForge AForge.Controls AForge.Imaging AForge. ...
- 在WPF中使用AForge.net控制摄像头拍照
原文:在WPF中使用AForge.net控制摄像头拍照 利用AForge.net控制摄像头拍照最方便的方法就是利用PictureBox显示摄像头画面,但在WPF中不能直接使用PictureBox.必须 ...
- iOS开发系列--音频播放、录音、视频播放、拍照、视频录制
--iOS多媒体 概览 随着移动互联网的发展,如今的手机早已不是打电话.发短信那么简单了,播放音乐.视频.录音.拍照等都是很常用的功能.在iOS中对于多媒体的支持是非常强大的,无论是音视频播放.录制, ...
- iOS开发----音频播放、录音、视频播放、拍照、视频录制
随着移动互联网的发展,如今的手机早已不是打电话.发短信那么简单了,播放音乐.视频.录音.拍照等都是很常用的功能.在iOS中对于多媒体的支持是非常强大的,无论是音视频播放.录制,还是对麦克风.摄像头的操 ...
- 音频播放、录音、视频播放、拍照、视频录制-b
随着移动互联网的发展,如今的手机早已不是打电话.发短信那么简单了,播放音乐.视频.录音.拍照等都是很常用的功能.在iOS中对于多媒体的支持是非常强大的,无论是音视频播放.录制,还是对麦克风.摄像头的操 ...
- iOS音频播放、录音、视频播放、拍照、视频录制
随着移动互联网的发展,如今的手机早已不是打电话.发短信那么简单了,播放音乐.视频.录音.拍照等都是很常用的功能.在iOS中对于多媒体的支持是非常强大的,无论是音视频播放.录制,还是对麦克风.摄像头的操 ...
随机推荐
- uwsgi + nginx 发布
下载uwsgi 基于pip 若是没有下载 yum install -y python2-pip pip install uwsgi 出上面的错 ,安装python的development包 yum i ...
- 编译安装PHP以及需要的基本扩展库(php7.4)
安装配置选项1: ./configure --prefix=/usr/local/php --with-mysql=/usr/local/mysql --with-curl --with-freety ...
- 旅游网dao层
# 注册功能 # 1.根据用户名查询用户 select * from tab_user where username=#{username} # 2.插入注册用户信息 insert into tab_ ...
- 生鲜超市项目错误及解决办法(crispy_forms、外键指向自己、class嵌套访问父类、meta类及各种字段参数)
为什么要在INSTALLED_APPS中加入crispy_forms? 因为django-crispy-forms 是对django form在html页面呈现方式进行管理的一个第三方插件. 为什么有 ...
- .net使用IIdentity和IPrincipal实现自定义身份及权限认证【转】
1,通过继承BasePage页实现角色权限控制 context.User中保存的信息就是相关的角色与权限信息.Context.User类型为System.Security.Principal.IPri ...
- ESA2GJK1DH1K升级篇: 快速的移植升级程序到自己的项目(BootLoader程序制作)
前言 此代码兼容STM32F103全系列 为避免添加上升级程序造成内存不足,请使用128KB Flash及其以上的型号 这篇文章是为了能够让大家快速移植我的升级模板程序到自己的项目 BootLoade ...
- JAVA还没死的原因
尽管 TIOBE 指数显示,Java 是一门正在衰落的语言,但它仍然稳居榜首.从 2016 年到 2017 年间,这个数字可能会大幅下降,但最近下降速度有所放缓:在 2018 年 10 月到 2019 ...
- Zabbix介绍及安装
Zabbix简介 Zabbix是一款能够监控各种网络参数以及服务器健康性和完整性的软件,是一个企业级的分布式开源监控方案.Zabbix使用灵活的通知机制,允许用户为几乎任何事件配置基于邮件的告警.这样 ...
- 在程序中修改IP win7 winXP(参考1)
https://blog.csdn.net/bbdxf/article/details/7548443 Windows下程序修改IP的三种方法 以下讨论的平台依据是Window XP + SP1, 不 ...
- CF717A Festival Organization(第一类斯特林数,斐波那契数列)
题目大意:求 $\sum\limits_{n=l}^{r}\dbinom{f_n}{k}\bmod 10^9+7$.其中 $f_n$ 是长度为 $n$ 的 $01$ 序列中,没有连续两个或超过两个 $ ...