基于delphi的摄像头软件控制设计内容摘要:

窗体,打开摄像头,获取视频句柄等相关数据,完成视频信息的初步采集。 关闭设备 断开系统与摄像头的链接,释放视频窗口和内存空间。 保存为 BMP 文件 实时拍摄,抓取瞬间图像 ,并 保存为 BMP文件。 开始录像 将视频捕获的图像信息保存为 avi 文件,录像过程完成音频文件( *.wav)的同步录制。 该模块分为短时录制和长时录制,短时录制的录制时间完全由用户控制。 长时录制时,当用户输入文件名后,在第一时间段内,程序将 以用户输入的文件名为主文件名自动保存,保存过程中一旦发现硬盘空间不足即停止录制,其后,每隔一小时系统自动存盘一次,并根据用户输入的文件名自动产生文件序号,作为新的 AVI 文件名进行保存。 停止录像 视频文件( *.avi)与音频文件 (*.wav)录制完成,释放缓存中的视频文件流。 复制到剪贴板 将实时抓取的瞬间图像送往剪贴板。 显示格式设置 设置视频信息的显示格式、图像大小等。 视频回放 对录制好的视频信息,用户可随时根据需要回放观看。 帮助系统 介绍系统 的帮助文件、版权信息等,以方便于用户使用该系统。 控制 的 具体 实现 视频捕获流程 ( 1)创建“捕获窗” 在进行视频捕获之前必需要先创建一个“捕获窗”,并应以此为基础进行所有的信息捕获及设置操作。 “捕获窗”可用 AVICap 窗口类的“ Cap Create Capture Window”函数来创建,在“捕获窗”的创建过程中,需指定捕捉窗口的名字、窗口风格、窗口左上角坐标、窗口的宽度和高度以及父窗口的句柄和该捕捉窗口的 ID 等信息。 “捕获窗”类似于标准控件,它的主要功能有: ① 动态地同视频和音频输入器件连接或断开; ② 对输入的视频流进行实时显示; ③ 在捕获时,可指定所用的文件名,并可将捕获文件的内容拷贝到另一个文件; ④ 设置捕获速率、捕获比例、显示格式等信息; ⑤ 显示控制视频源、视频格式及视频压缩的对话框; ( 2)建立捕获窗和驱动程序间的关联 单独定义的捕获窗是不能工作的,它必须与一个设备相关联才能取得视频信号。 用向 WINDOWS 发送 CapDriver Connect 函数消息,使捕获窗与其设备驱动程序相关联,以便捕获视频信息。 ( 3)设置视频设备的属性 通过设置 TcaptureParms 结构变量的各个成员变量,可以控制 设备的采样频率、中断采样按键、状态行为。 设置好 TcaptureParms 结构变量后,可以用函 数CapCaptureSetSetup 使设置生效。 之后还可以用 CapPreviewScale、 CapPreviewRate 设置预览的比例与速度,也可以直接使用设备的默认值。 ( 4)打开预览 当捕获窗和驱动程序建立关联之后,用 CapPreview 启动预览功能,这时就可以在屏幕上看到来自摄像机的图像了。 利用函数 CapOverlay 可选择是否采用叠加模式预览,以使系统资源占用小,视频显示速度加快。 通过以上四步就可以建立一 个基本的视频捕获程序,但如果想自己处理从设备捕获到的视频数据,则要使用捕获窗回调函数来处理,比如一帧一帧地获得视频数据或以流的方式获得视频数据等,因此,回调函数在视频捕捉设计中具有举足轻重的作用。 软件的实现 新建一个工程,并将 加入新建的工程中。 在工程的主窗体上放置所需的各种控件,并对各控件进行静态的属性设置,设计好的主窗体如图 41 所示: 为了程序的需要,首先在主窗口的 PUBLIC 部分定义一些相关变量: dc:HDC。 //定义显示设备 hdd:HDRAWDIB。 //设备无关位图格式 BmpInfo,BmpInfo1:BITMAPINFO。 //位图格式 hWndC : THandle。 //视频输出句 Data:PChar。 //存放视频输出数据的内存地址 图 41 主窗体 在 上面所定义的全局变量中,位图格式被定义为设备无关位图。 所谓设备无关位图是指 WINDOWS 可在任何类型的显示设备上显示所存储的图像, 以后的以 BMP 为扩展名的文件都是设备无关位图 (DIB)文件。 DIB 位图的存储特点为:①图像存储顺序是从左到右,从下到 上。 即存储的位图是显示的位图图像的倒置。 ②象素位数为 1 的 DIB 位图,每个字节存储 8个象素。 字节的最高位对应于最左边的象素。 ③象素位数为 4的 DIB 位图,每个字节存储 2个象素。 高 4位对应于最左边的象素。 ④象素位数为 24 的 DIB 位图,每个象素占三个字节,从左到右分别存储蓝、绿、红的颜色值 [10]。 DIB 文件由 4 个部分组成:位图文件头、位图信息头、颜色表和位图图像数据。 管 理 位 图 文 件 头 、 位 图 信 息 头 和 颜 色 表 的 3 个 结 构 分 别 为 BITMAPFILEHEADER、 BITMAPINFOHEADER 和 RGBQUAD。 其中 BITMAPINFOHEADER 和RGBQUAD 结构又通过 BITMAPINFO 来组合。 DIB 位图的信息头如表 所示: 表 BITMAPINFOHEADER 数据域含义 数据域参数 数据域含义 biSize 本结构大小的字节数 Width 位图的宽度、单位为 象 素点 Height 位图的高度、单位为 象 素点 数据域参数 数据域含义 Planes 指定设备所用的颜色位面数,位面数决定了设备所使用的颜色数, 2^位面数就是颜色数。 如:单色屏幕位面数为 1,颜色数=2^1=2, 16色屏幕颜色位面数为 4,即 2^4 BitCount 象素的位数 (如 1位位图 、 12位位图、 24位位图等 ) Compression 压缩方式 (0表示不压缩 ) SizeImage 位图数据的字节数 XPelsPerMeter 水平分辨率(象素点 /米) YPelsPerMeter 垂直分辨率(象素点 /米) Clrused 图像中使用的颜色数 ClrImportant 图像中重要的颜色数 虽然定义了位图格式,但要让捕获的图像能在视频窗口中正确显示出来,还必须保证该窗口的位图格式与视频所定义的位图格式一致。 其中,位图格式变量Bmpinfo1 用于输出显示,它用来保证这种一致性。 设计一个 SetBmpinfo1 过程来设置该位图变量的格式: procedure ()。 begin :=sizeof(BITMAPINFO)。 :=224。 :=224。 :=1。 :=12。 :=808596553。 :=60000。 :=224。 :=224。 :=0。 :=0。 end。 在窗口初始化过程中,需要用定义过的格式和结构对相关变量进行初始化,使绘图板和设备均处于打开状态,并提前为视频数据分配内存空间: procedure (Sender:TObject)。 begin setbmpinfo1()。 //设置显示位图的格式 dc:=getdc()。 //获取显示设备 hdd:=drawdibopen()。 //打开绘图板 if hdd=null then (39。 没 有绘图信息句柄 !39。 )。 getmem(data,440000)。 //分配用于存放视频数据的内存 end。 在窗口的关闭过程中,需要释放掉为视频数据分配的内存空间,如果视频设备和绘图板等设备没有关闭,则关闭相关设备,将设备与变量置于初始状态,为下次使用作好准备: procedure (Sender: TObject。 var Action: TCloseAction)。 begin if hwndc0 then begin sendmessage(hwndc,wm_cap_driver_disconnect,0,0)。 end。 freemem(data)。 //释放分配的内存 drawdibclose(hdd)。 //关闭已打开的设备 end。 启动摄像与音频录制 ( 1)启动摄像 要启动摄像头开始摄像,首先要引入一个外部函数capCreateCaptureWindowA[5],这个函数来自于 动态链接库中。 调用 capCreateCaptureWindowA 函数,就可以建立视频捕捉窗体,通过向视频捕捉窗体发送相应的消息函数,即可实现捕捉窗口与设备的关联、捕捉视频、设置视频的格式等操作。 具体响应代码如下: //以下为核心代码,用于产生视频窗口 hWndC := capCreateCaptureWindowA(39。 视频窗口 39。 ,WS_CHILD or WS_VISIBLE ,,Form1.Handle,0)。 if hWndC 0 then //视频窗口产生正常,初始化相关设备 begin 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, 80, 0)。 SendMessage(hWndC,WM_CAP_SET_CALLBACK_FRAME,0,LongInt(@FrameCallBack))。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。