您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 企业文化 > C++ Builder 的多媒体世界9
基础综合C++Builder的多媒体世界在这个新的世代,图片、动画充斥在我们的身边,BCB当然也不能在多媒体这块区域缺席。在第9章我们将介绍各种多媒体组件的使用,也讨论有关绘图部分的设计,更深入探讨影像绘图处理上的速度,由于完整的组件支持,对于花俏功能的多媒体程序开发,对读者们来说已经不再是高深的程序。大纲•9-1Image组件的建立•9-2ImageList组件的建立•9-3Animate动画组件•9-4MediaPlayer组件•9-5绘图功能•本章习题9-1Image组件的建立•图形档案的表现是本章所要介绍最基本的功能,BCB提供图形加载的组件,可以方便的让我们操作图形显示和处理的动作,也就是本节所要介绍的Image组件。•Image组件不但可以让我们把图文件的内容显示在Image组件的显示范围之内,我们也可以针对开启的图文件存在组件属性里的数据作处理,也就是利用Image组件作为接口,让我们来编辑图形档案的内容。Image图形组件的主要属性属性(Properties)型态原型说明AutoSizebool是否让图形显示自动调整CanvasTCanvas描绘图像Centerbool调整图像在显示范围的中间PictureTPicture加载图像Heightint显示方块的长度Widthint显示方块的宽度Transparentbool背景是否透明Strecthbool是否缩放图像图档的加载方式•我们可以用两种方法加载档案:–第一种最简单的就是用对象编辑器(ObjectInspector)来手动放入档案:•我们在程序开发模式下在我们所建立的Image组件上面按两下鼠标左键,这时就会出现加载图文件的对话窗口,这时我们按下Load键就可以开启档案浏览的对话盒来指定要加载的档案。目前支持的图档格式有jpg,bmp,ico,emt,wmf等一般常见的档案格式。–另一种方式我们可以利用Picture属性里的LoadFromFile的函式•在程序执行时把图文件信息喂进去,除了在程序里面把档案的路径和名称写死,这样子在编译时期就决定了要载入的档案;我们还可以动态的指定档案,譬如说让使用者输入,或是可以藉由OpenDialog组件或是OpenPictureDialog组件让我们随意的开启所需要显示的图文件。9-2ImageList组件的建立•如果我们要设计的应用程序需要使用很多的图档,或是要大量的作图档的存取动作,将每个Image组件的加载动作都做设定是一件很费力的事情。这个时候我们也许会需要一个可以管理这些图形的方法。而TImageList组件顾名思义就是集中各个Image图像成为一个图像的列表,用意在可以让我们便于管理图像的存取,但是有一个非常重要的限制,就是列表中的图像大小要完全一样。ImageList组件的重要属性属性(Properties)型态原型说明AllocByInt预设的List空间BkColorTColor影像绘出时的背景颜色BlendColorTColor影像绘出时的前景混合色CountInt目前所存入List的图像数目HeightInt指定List里每个影像的高度WidthInt指定List里每个影像的宽度ImageTypeTimageType影像绘出时是否加入mask影像MaskedBool指定影像绘出时是否可以加入mask使用开发工具编辑ImageList•我们从右图里可以看到几个主要的部分,下面的Images里所显示的是目前List里所有的Image,当点选了之后可以在SelectedImage格里看到预览画面,而每个图像的下面所显示的数字就是该图像在这个List里面的Index编号,这是很重要的信息,我们在存取时所要指定图像就得要知道该图像在列表里的编号。使用程序代码编辑ImageList•除了用编辑画面加入图像,我们也可以在程序代码里利用内建的函式将图像加入列表里,如Add(),AddImage()等等。使用方式如:–Add(Graphics::TBitmap*Image,Graphics::TBitmap*mask);–就是指定Bitmap格式的图像加入List里。另外显示图像的方式我们可以利用Draw()函式,方法如下:•Draw(Graphics::TCanvas*,intx,inty,intIndex);•就是给予绘图的组件,绘图的起始坐标x和y,以及要绘出图像在ImageList里的Index编号。•另外我们也可以利用Delete()和Clear()两个函式把ImageList既有的图像删除,Delete函式是指定单一图像一一删除,所以我们必须在使用Delete()时要指定所要删除图像的Index编号,而Clear()函式则是将所有在列表里的图像全部删除,用法如下:–Delete(intIndex);–Clear();9-3Animate动画组件•使用Animate动画组件可将动画控制功能加到Form里,动画组件是一种可以显示影音动画AVI档案。AVI档案是一系列连续的Bitmap图形所结合排列成的大量影像,连续拨放就像动画一样,而每一个显示画面的单位一般都称为frame。BCB所提供的这个动画表现的组件功能并不太完整,并不能拨放压缩过的AVI档案,只能拨放标准的AVI格式的档案,而这样的格式已经慢慢的被淘汰了。我们来介绍这个组件的运作方式,其实Animate动画组件的使用方式和下一节所要介绍的MediaPlayer的方式差不多,不过功能稍嫌阳春了些??耈Animate动画组件的应用I•首先在开启AVI档案方面,组件的FileName属性可以让我们设定成所要开启的档案,所以我们可以利用这个属性作接口,把档案指定给Animate组件,当我们开启了档案之后就可以有以下的处理动作:Play,Seek,Reset,和Stop等等,这些动作都已经写成函式了。Animate动画组件的应用II•当我们把Animate组件加入Form时,所设定的组件大小就会是AVI格式拨放显示的大小。首先当使用者开启档案后,如要拨放则如下:–Animate1-Play(0,Animate1-FrameCount,1);•Play函式要求三个参数,分别为拨放的起始Frame,拨放的结尾Frame,以及拨放的次数,所以本例里是从0开始拨放,拨放完整个AVI来源,而拨放次数是1次。而我们按下停止功能键要求拨放停止时,程序就执行:–Animate1-Stop();•最后我们要求程序在拨放结束时能够回到拨放前的起始Frame,所以在Animate组件在Stop事件发生时给予Reset的动作:–Animate1-Reset();9-4MediaPlayer组件•Windows操作系统的一大魅力,就是在多媒体的表现上面一直有很突出的效果。现在我们在Windows环境下,只要有操作系统内建的MediaPlayer软件,几乎就可以拨放所有的多媒体档案。在窗口环境下拨放软件透过MCI(MediaControlInterface)函式接口与多媒体设备沟通,所谓的MCI就是一种介于拨放接口和媒体资源的接口,对于拨放多媒体数据,已经有MCI完成一些处理动作,让程序设计师可以利用这个接口轻易的作多媒体数据的处理。在BCB的环境下我们可以利用MediaPlayer组件来达到拨放???MediaPlayer按键和功能说明图示按钮名称设定值说明PlaybtPlay开始执行拨放动作PausebtPause暂时停止拨放的动作StopbtStop停止目前拨放的动作NextbtNext跳到下一个TrackPrevbtPrev条回上一个TrackStepbtStep跳到下一个FrameBackbtBack跳回上一个FrameStartRecordbtStartRecord开始执行录音动作EjectbtEject弹出光驱MediaPlayer重要属性说明I•1.FileName属性:–FileName的型态为一Ansi字符串,内容为目前组件正在拨放的档案路径以及名称。透过FileName属性我们可以利用OpenDialog组件来处理开启档案的接口,如:•MediaPlayer1-FileName=OpenDialog1-FileName;•2.Mode属性:–Mode属性为纪录目前所开启媒体设备的模式,其模式共有7种,分别为:NotReady,Stopped,Playing,Recording,Seeking,Paused,Open。当我们制作拨放程序接口时可以将Mode显示在窗口某个地方,让使用者知道目前程序所执行的动作为何。MediaPlayer重要属性说明II•3.Notify属性:–Notify属性为控制OnNotify事件是否发生,型态为Bool。如值为true则在目前MCI命令完成时将会启动OnNotify事件,若为False则否。举例来说,如果我们希望拨放媒体完成时可以产生一个讯息告知我们档案已经拨放完毕,那我们就可以在Notify属性里设定成true,并在OnNotify事件里加进显示讯息的程序代码,Notify更改如:•MediaPlayer1-Notify=true;MediaPlayer1-Play();–OnNotify事件程序代码加入如下:•application-MessageBox(‘档案拨放完毕!’,NULL,MB_OK);end;•4.Position属性,StartPos属性,EndPos属性;–纪录档案拨放的位置是控制档案拨放的方式,StartPos属性可以让我们设定拨放档案的时候要从哪个位置开始拨放,EndPos属性则是让我们设定要拨放到哪个位置,Position属性则是纪录目前拨放的位置。预设的StartPos和EndPos分别为档案开始和结尾的地方,如果我们希望在拨放接口里加入ScrollBar那我们就可以利用ScrollBar里的Position属性和MediaPlayer的Position去做对应。MediaPlayer范例说明I•拨放界面如右图•范例我们可以看到的组件有MediaPlayer组件,Panel组件,MainMenu组件,ScrollBar组件以及三个Label组件。另外为了功能而加的有OpenDialog组件和Timer组件。MediaPlayer范例说明II•首先我们先在新的项目里建立以下对象:OpenDialog1,Panel1,MediaPlayer1,ScrollBar1,Label1,Label2,Label3,Timer1,以及MainManu1等组件。在MainMenu1里我们加入两个选项;Open和Exit,并且MainMenu1的Caption更改成FileMediaPlayer范例说明III•我们设计按下File的Open时,就会开启档案开启对话框,让我们选择要拨放的档案,而按下Exit时就关闭窗口。所以要加入以下程序代码void__fastcallTForm1::Open1Click(TObject*Sender){if(OpenDialog1-Execute()){MediaPlayer1-FileName=OpenDialog1-FileName;MediaPlayer1-Open();Label3-Caption=MediaPlayer1-TrackLength[1];ScrollBar1-Max=MediaPlayer1-TrackLength[1];}}MediaPlayer范例说明IV•首先我们希望开启的档案由MedaiPlayer1来拨放;–MediaPlayer1-FileName=OpenDialog1-FileName;•接着我们开始开启MediaPlayer–MediaPlayer1-Open();•关于ScrollBar的总长度我们希望和档案大小相关,所以我们以下设定:–ScrollBar1-Max=MediaPlayer1-TrackLength[1];•然后我们设定按下Exit时的动作,在Exit1被
本文标题:C++ Builder 的多媒体世界9
链接地址:https://www.777doc.com/doc-3391266 .html