用Delphi+DSPack开发数码摄像程序-最新文档资料

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

用Del phi+DSP ack开发数码摄像程序
摘要:考生肖像信息的即时采集越来越多地被应用到招
生考试工作中。

文章介绍了如何在Windows系统上运用Debhi 7
和DSPack快速开发基于Direct Show技术的数码摄像程序。

0 引言
在招生信息采集工作中,一个非常重要的部分就是采集考生的肖像信息。

随着考生人数的激增与工作要求的提高,肖像采集模式的不断调整,从最早的扫描仪扫描照片、数码相机联机拍摄
直到现在的视频捕获卡+摄像机快速采集,以不断适应招生形
势的变化。

我们把联机直接拍摄考生肖像的程序叫数码摄像程
序。

对于数码摄像程序,早期大多利用Video forWindow 编写,
它支持的设备种类少,且实现难度较高。

现在利用Direct Show 可以开发出支持摄像头、内置或外置视频采集卡、1394 卡、内置或外置电视卡等多种设备的数码摄像程序,但直接用Direct Show开发,难度同样很高且开发效率也不高。

可是有了DSPack 情况就完全不同了,利用它来开发一个数码摄像程序,几乎是
件轻而易举的事情。

DSPack是一组封装了MS Direct Show 和DirectX 技术的组件,用于在安装了DirectX9 的Windows9x、ME、2000 和Windows
XP系统上的多媒体应用系统的开发。

它支持De Ip hi5、6、7和C++ Builder 6 ,它不仅功能强大而且完全免费。

本文对利用
DSP ack开发视频捕获方式的数码摄像程序做一个粗浅的介绍。

1DSP ack的安装
DSP ack的下载地址为: progdigy/modules.php?name=DSPack ,当前版本是2.3.4 。

为了避免不必要的麻烦,先要确认系统中已装上了DirectX9 ,然后再安装DSPack如果想进行VMR Direct3D或ASF方面的开发,
则还需要下载并安装一些别的内容( 请参考所下载的
DSPack234.zip中所含Readme.htm中文件的相关内容)。

下面是
DSP ack的安装步骤:
(1)将DS Pack解压至任意目录。

假设解压至
Programfiles\DSPack 目录,然后查看,有没有只读属性的文件,如果有,请把只读属性去掉;
(2)以Delphi 7 为例,在Tools>Environment
Options>Li-brary>Library path
中,添加以下搜索路径:
Program files\DSPack\src\Directx9
Program files\DSPack\src\DSPack
(3)用Files>open 分别打开Program files\packages 下的
DirectX9_D7.d pk 和DSP ack_D7.d pk 按Com pile 钮进行编译;
(4) 最后打开Program files\packages 下的
DSP ackDesign_D7.d pk,按In stall 钮进行安装。

以上步骤如果顺利完成,并且在Delphi 工具栏上出现了如图1所示的DSP ack工具栏,则安装成功。

2一个最基本的摄像程序功能概述
它由预览窗口、取景框、照片名输入框、拍摄钮、照片和设备连接与设置这六个部分组成。

其使用步骤与方法为:首先,在
程序运行时所显示的视频设备下拉列表中,选中其中一个(如果
有多个的话) ,按连接按钮,程序就会连接指定的视频设备,如果连接正常就会在预览窗口中即时显示被拍摄对像;然后输入照
片名,自由拖动取景框,框住要拍摄的部分(通常是头像),按拍
摄按钮就可以把取景框中的内容拍摄下来显示在照片上,保存为
并同时“照片名.jpg ”。

图2 所示,这是通过一个Logitech QuickCam Pro 4000 摄像头拍摄某游戏杂志的封面女主角所看到的程序运行效果截图。

3关键点说明
(1)所用到的DSPack组件
FilterGraph 、Filter 、SampleGrabber 和VideoWindow 各一个,将Filter 、SampleGrabber 和VideoWindow 的FilterGraph
属性都设置成FilterGraph 的name并注意将FilterGraph 的Mode属性设置成gmCapture。

DSP ack及普通VCL的组件分布如图3所示。

(2)视频设备的联接因为是要用来拍摄照片,所以我们要求只列出支持DireShow 的视频设备就可以了,否则在设备列表中将出现一大堆与应用无关的设备。

方法是声明一个TsysDevEnum
型变量sysdev ,在表单的OnCreate 中,利用
TSysDevEnum.Create(CLSID_VideolnputDeviceCategory) 把视频设备列表取到sysdev 中。

(3)取景框的制作
如果用Video for Window 方式开发过视频捕获程序,就会知道要在一个视频流上放一个框不是一件容易的事――任何控件往上一放,只要一连接视频,它就会消失。

传统的办法是放一个Timer ,在OnTimer 事件中不停地调用API 直接写屏画框。

这种方式控制起来比较复杂,常常会由于interval 设置得不当或因为机器性能的差异,出现取景框拖动时的轨迹残留与闪烁现象。

在DSP ack 中可以用DSVideoWi ndowEx2来代替VideoWi ndow,
因为它有Canvas,而且可以把视频输出到任何有Handle的控件
上。

如何利用它的这一特性来做可以移动的取景框,可以参考
DSP ack自带的一个例子(在
Dspack'tDemoskDSVideoWindowEXkPlayWin 中)。

其实,用第种方法也不简单。

更简单更直接的办法是可以在SampleGrabber
的OnBuffer 事件中,利用其GetBitmap 方法,将视频流导向到一个普通的Image上,而在一个\ romage上,可以想放什么就
放什么,控制起来很方便。

因为窗口上没有必要放两个一样的视
频,所以把VideoWindow的高和宽都设置成了0。

这是个典型的
懒人懒办法,其它副作用没发现,只是多了个Image。

(4)视频设备的属性设置
有时候连接到程序中的视频设备并没有工作在想要的模式
中,或者为了利用它们自带的一些功能,来改善画面的质量,而又想在程序中直接调出如图4 所示的设置窗口时,就需要用到
DsUtil 的HaveFilterPropertyPage()
ShowFilterPropertyPage() 和ShowPinpropertyPageO 了。

4结束语
本文对“数码摄像”的主要功能(6 种)作了介绍,并描述了如何实现一个最基本的数码摄像应用过程,但在实际中要考虑的因素问题还有很多,如:错误控制、自适应视频流的大小、允许视频的缩放、照片的存储控制、操作人员的权限控制、头像的自动切割等等。

相关文档
最新文档