多媒体软件设计技术(陈启安)第8章_第1页
多媒体软件设计技术(陈启安)第8章_第2页
多媒体软件设计技术(陈启安)第8章_第3页
多媒体软件设计技术(陈启安)第8章_第4页
多媒体软件设计技术(陈启安)第8章_第5页
已阅读5页,还剩59页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

多媒体软件设计技术(陈启安)第8章第一页,共64页。8.1VB播放视频的方法

8.1.1利用Windows部件中的Animation控件播放AVI文件首先利用动画生成软件生成后缀为.AVI的动画文件(如PLAY.AVI),然后进入VisualBasic5.0,在控件工具栏中按下鼠标右键,选择快捷菜单中的“部件”,并选中“MicrosoftWindowsCommonControls-2-5.0”前的复选框,按“确认”键退出。建立一个新的表单(Form),选择控件工具栏中的“Animation”控件,在Form1上拉出一个方框(Animation1),设置它的AutoPlay属性为False,Visible属性为False;点击控件工具栏中的按钮控件,在Form1中创建一个按钮(Command1),设置它的Caption属性为“播放”。第二页,共64页。双击Form1,编写Form1的Load过程:Animation1.OPEN“PLAY.AVI”双击Command1,编写Command1的Click过程:Animation1.Visible=TrueAnimation1.Play注:本方法只适用于播放无声的AVI文件。第三页,共64页。

8.1.2利用Windows的API函数MciSendString()播放AVI文件进入VisualBasic5.0中,建立一个新的表单,并在表单上创建一个按钮(Command1),设置它的Caption属性为“播放”;再在表单上创建一个图画盒控件(Picture1)作为动画窗口。加入通用模块:DeclareFunctionmciSendStringLib"winmm.dll"Alias"mciSendStringA"(ByVallpstrCommandAsString,ByVallpstrReturnStringAsString,ByValuReturnLengthAsLong,ByValhwndCallbackAsLong)AsLong第四页,共64页。DeclareFunctionSetWindowPosLib"user32"(ByValhwndAsLong,ByValhWndInsertAfterAsLong,ByValxAsLong,ByValyAsLong,ByValcxAsLong,ByValcyAsLong,ByValwFlagsAsLong)AsLong双击Form1,编写Form1的Activate过程:DimAAAsLongDimPlayAviAsLongDimtmpValAsStringDimKeyValSizeAsLongOnErrorResumeNext第五页,共64页。tmpVal=String$(1024,0)KeyValSize=1024PlayAvi=mciSendString("OPENc:\windows\media\logo.AVIALIASAVI01TYPEAVIVIDEOSTYLECHILDPARENT"+Str(Picture1.hwnd)+"WAIT",tmpVal,KeyValSize,0)x1Pos=Picture1.Widthy1Pos=Picture1.HeightOnErrorGoto0第六页,共64页。双击Form1中的按钮,编写Command1的Click过程:OnErrorResumeNexttmpVal=String$(1124,0)KeyValSize=1024PlayAvi=mciSendString("PLAYAVI01",tmpVal,KeyValSize,0)OnErrorGoto0第七页,共64页。

8.1.3利用Windows的API函数MciExecute()播放AVI文件进入VisualBasic5.0中,建立一个新的表单,并在表单上创建一个按钮(Command1),设置它的Caption属性为“播放”;再在表单上创建一个图画盒控件(Picture1)作为动画的输出窗口。加入通用模块:DeclareFunctionmciExecuteLib"winmm.dll"(ByVallpstrCommandAsString)AsLongDeclareFunctionSetWindowPosLib"user32"(ByValhwndAsLong,ByValhWndInsert第八页,共64页。AfterAsLong,ByValxAsLong,ByValyAsLong,ByValcxAsLong,ByValcyAsLong,ByValwFlagsAsLong)AsLong双击Form1,编写Form1的Activate过程:DIMPlayAviASINTEGEROnErrorResumeNextPlayAvi=mciExecute("OPENPLAY.AVIALIASAVI01TYPEAVIVIDEOSTYLECHILDPARENT"+Str(Picture1.hwnd)+"WAIT")第九页,共64页。x1Pos=Picture1.Widthy1Pos=Picture1.HeightOnErrorGoto0双击Form1中的按钮,编写Command1的Click过程:OnErrorResumeNextPlayAvi=mciExecute("PLAYAVI01")OnErrorGoto0第十页,共64页。

8.1.4利用Windows部件中的MMControl5.0控件播放AVI文件

进入VisualBasic5.0,在控件工具栏中按下鼠标右键,选择快捷菜单中的“部件”,选中“MicrosoftMultimediaControl5.0”前的复选框,按“确认”键退出。建立一个新的表单,并在表单上创建一个“MicrosoftMultimediaControl”控制(MMControl1),设置它的DeviceType属性为“AVIVIDEO”,属性为“PLAY.AVI”,Visible属性为False;再在表单上创建一个按钮(Command1),设置它的Caption属性为“播放”;最后在表单上创建一个图画盒(Picture1),作为动画的输出窗口,设置它的Visible属性为False。第十一页,共64页。双击Form1,编写Form1的Activate过程:MMControl1.hWndDisplay=Picture1.hWndMmcontrol1.Command=″OPEN″双击Form1中的按钮,编写Command1的Click过程:Picture1.Visible=TrueMmcontrol1.Command=″PLAY″第十二页,共64页。

8.1.5利用Windows可插入对象中的电影剪辑控件播放AVI文件进入VisualBasic5.0,在控件工具栏中按下鼠标右键,选择快捷菜单中的“部件”,再选择“可插入对象”选项卡,然后选中“视频剪辑(AVI)”前的复选框,按“确认”键退出。建立一个新的表单,并在表单上创建一个“视频剪辑(AVI)”控制(Avifile1),此时会见到媒体播放器的播放界面,按照在媒体播放器中播放AVI文件的方式进行设置。设置完成后回到VisualBasic5.0中,运行此程序,可见到动画的开始画面,双击它即可实现动画文件的播放。第十三页,共64页。

8.1.6利用Windows的部件中的OLE控件播放AVI文件进入VisualBasic5.0中,建立一个新的表单,并在表单上创建一个按钮(Command1),设置它的Caption属性为“播放”;再在表单上创建一个OLE控件(Ole1),此时会见到媒体播放器的播放界面,按照在媒体播放器中播放AVI文件的方式进行设置。设置完成后回到VisualBasic5.0中,设置Ole1的AutoActivate属性为0-Manual,Visible属性为False。双击Command1,编写Command1的Click过程:〖HT5”〗Ole1.Visible=TrueOle1.Doverb0第十四页,共64页。8.2同时播放二个AVI视频文件

在8.1中,我们知道了可以使用API函数mciExecute播放视频文件。在这一节里,我们将介绍如何同时播放二个视频文件,从而实现视频画中画的效果。下面我们用一个例子说明如何利用Windows95的API函数mciExecute、mciSendString和SetWindowPos来达到上述目的在程序中使用了一大一小的两个PictureBox控件Picture1和Picture2。其中Picture1为大画面,用来播放C:\Windows\MEDIA\LOGO1.AVI文件;Picture2为小画面,用来播放C:\Windows\MEDIA\LOGO2.AVI文件。运行此程序可以看见LOGO1.AVI、LOGO2.AVI两个视频文件同时播放,下面是完整的程序编码(图8.1为程序运行中某一刻的窗口显示结果)。第十五页,共64页。图8.1两个视频文件同时播放第十六页,共64页。对象属性定义如下:BeginVB.FormForm1Caption="Form1"ClientHeight=3840ClientLeft=1650ClientTop=1590ClientWidth=5070LinkTopic="Form1"ScaleHeight=256第十七页,共64页。ScaleMode=3′Pixel必须为像素ScaleWidth=338BeginVB.PictureBoxPicture2Appearance=0′FlatAutoSize=-1′TrueBackColor=&H80000005&BorderStyle=0′NoneForeColor=&H80000008&第十八页,共64页。Height=1800Left=2160ScaleHeight=120ScaleMode=3′Pixel必须为像素ScaleWidth=160TabIndex=1Top=1200Width=2400End第十九页,共64页。BeginVB.PictureBoxPicture1Appearance=0′FlatAutoSize=-1′TrueBackColor=&H80000005&ForeColor=&H80000008&Height=3600Left=120ScaleHeight=238第二十页,共64页。ScaleMode=3′Pixel必须为像素ScaleWidth=318TabIndex=0Top=120Width=4800EndEnd第二十一页,共64页。程序代码如下:OptionExplicitPrivateDeclareFunctionmciExecuteLib"winmm.dll"(ByVallpstrCommandAsString)AsLongPrivateDeclareFunctionmciSendStringLib"winmm.dll"Alias"mciSendStringA"(ByVallpstrCommandAsString,ByVallpstrReturnStringAsString,ByValuReturnLengthAsLong,ByValhwndCallbackAsLong)AsLongPrivateDeclareFunctionSetWindowPosLib"user32"(ByValhwndAsLong,ByValhWndInsertAfterAsLong,ByValxAsLong,ByValyAsLong,ByValcxAsLong,ByValcyAsLong,ByValwFlagsAsLong)AsLong第二十二页,共64页。PrivateSubForm-Activate()DimxPosAsLongDimyPosAsLongDimTempAsLongDimPlayStatAsLongDimtmpValAsStringDimKeyValSizeAsLongOnErrorResumeNext′=========准备在Picture1中播放LOGO1.AVI第二十三页,共64页。tmpVal=String$(1024,0)KeyValSize=1024PlayStat=mciSendString("STATUSAVI1READY"+Str(Picture1.hwnd),tmpVal,KeyValSize,0)IfPlayStat<>263ThenPlayStat=mciExecute("closeAVI1")EndIftmpVal=String$(1024,0)KeyValSize=1024第二十四页,共64页。PlayStat=mciSendString("OPENC:\Windows\MEDIA\LOGO1.AVIALIASAVI1TYPEAVIVIDEOSTYLECHILDPARENT"+Str(Picture1.hwnd)+"WAIT",tmpVal,KeyValSize,0)xPos=Picture1.WidthyPos=Picture1.HeighttmpVal=String$(1024,0)KeyValSize=1024Temp=mciSendString("STATUSAVI1WINDOWHANDLEWAIT",tmpVal,KeyValSize,0)第二十五页,共64页。If(Asc(Mid(tmpVal,KeyValSize,1))=0)ThentmpVal=Left(tmpVal,KeyValSize-1)ElsetmpVal=Left(tmpVal,KeyValSize)EndIfTemp=SetWindowPos(tmpVal,0,0,0,xPos,yPos,0)mciExecute"WINDOWAVI1STATESHOW"′=========准备在Picture2中播放LOGO2.AVItmpVal=String$(1024,0)KeyValSize=1024第二十六页,共64页。PlayStat=mciSendString("STATUSAVI2READY"+Str(Picture2.hwnd),tmpVal,KeyValSize,0)IfPlayStat<>263ThenPlayStat=mciExecute("CLOSEAVI2")EndIftmpVal=String$(1024,0)KeyValSize=1024PlayStat=mciSendString("OPENC:\Windows\MEDIA\LOGO2.AVIALIASAVI2TYPEAV第二十七页,共64页。IVIDEOSTYLECHILDPARENT"+Str(Picture2.hwnd)+"WAIT",tmpVal,KeyValSize,0)xPos=Picture2.WidthyPos=Picture2.HeighttmpVal=String$(1024,0)KeyValSize=1024Temp=mciSendString("STATUSAVI2WINDOWHANDLEWAIT",tmpVal,KeyValSize,0)第二十八页,共64页。If(Asc(Mid(tmpVal,KeyValSize,1))=0)ThentmpVal=Left(tmpVal,KeyValSize-1)ElsetmpVal=Left(tmpVal,KeyValSize)EndIfTemp=SetWindowPos(tmpVal,0,0,0,xPos,yPos,0)mciExecute"WINDOWAVI2STATESHOW"′========================================第二十九页,共64页。mciExecute"PLAYAVI1REPEAT"′开始播放LOGO1.AVImciExecute"PLAYAVI2REPEAT"′开始播放LOGO2.AVIOnErrorGoTo0EndSubPrivateSubForm-QueryUnload(CancelAsInteger,UnloadModeAsInteger)mciExecute"STOPAVI1"′停止播放LOGO1.AVImciExecute"STOPAVI2"′停止播放LOGO2.AVImciExecute"CLOSEAVI1"′关闭LOGO1.AVImciExecute"CLOSEAVI2"′关闭LOGO2.AVIEndSub第三十页,共64页。8.3VCD播放程序前面我们介绍了播放AVI视频文件的方法。在这一节里,我们将学习影片文件(.mov、.mmm、.mpeg、.mpg、.mpa、.mpv)和VCD文件(.dat)的播放方法。由于Microsoft公司的ActiveMovie控件内嵌了MPEG音频解码器和MPEG视频解码器,因此我们可以直接用它来播放符合MPEG规范的VCD文件。该控件除了支持影片文件(.avi、.mov、.mmm、.mpeg、.mpg、.mpa、.mpv)和VCD文件(.dat)外,还支持音频文件(.wav、.mid、.rmi)。播放时若用鼠标右键双击画面,第三十一页,共64页。则可以直接对画面的播放、暂停、停止等进行控制。我们还可以自行在“属性”栏中对影片播放进行设置,诸如设置“播放次数”、“音量”、“影片大小(1/16、1/4、1/2、1、2倍和全屏)”、“面板”、“颜色”、“过滤器”等。下面我们利用该控件来设计一个“VCD播放器”。首先,我们新建立一个“工程”,依次选择“工程/部件”,然后添加MicrosoftActiveMovieControl(Amovie.OCX)和MicrosoftCommondialogControl(COMDLG32.OCX),这时控件会出现在“工具箱”中。将上述两个控件加进窗体,再单击“菜单”工具栏,建立主菜单项。下面给出了完整的程序代码。第三十二页,共64页。对象属性定义如下:BeginVB.FormForm1Caption="VCD播放程序"ClientHeight=6375ClientLeft=1245ClientTop=1725ClientWidth=8370LinkTopic="Form1"ScaleHeight=6375ScaleWidth=8370第三十三页,共64页。BeginVB.CheckBoxCheck2Caption="自动到带"Height=255Left=6720TabIndex=5Top=5760Value=1′CheckedWidth=1095End第三十四页,共64页。BeginVB.FrameFrame1Caption="显示模式"Height=1335Left=6600TabIndex=2Top=3720Width=1575第三十五页,共64页。BeginVB.OptionButtonOption2Caption="帧"Height=255Left=120TabIndex=4Top=840Width=1215End第三十六页,共64页。BeginVB.OptionButtonOption1Caption="时间"Height=255Left=120TabIndex=3Top=360Value=-1′TrueWidth=1215EndEnd第三十七页,共64页。BeginVB.CheckBoxCheck1Caption="循环播放"Height=495Left=6720TabIndex=1Top=5160Width=1455End第三十八页,共64页。BeginAMovieCtl.ActiveMovieActiveMovie1Height=5895Left=360TabIndex=0Top=240Width=5895-ExtentX=10398-ExtentY=10398ShowPositionControls=-1′TrueShowSelectionControls=-1′TrueAppearance=0End第三十九页,共64页。BeginMSComDlg.CommonDialogCommonDialog1Left=720Top=5640-ExtentX=847-ExtentY=847-Version=393216End第四十页,共64页。BeginVB.Menumn-fileCaption="文件(&A)"BeginVB.Menumn-Caption="打开(&O)"EndEnd第四十一页,共64页。BeginVB.Menumn-soundCaption="声音(&S)"BeginVB.Menumn-sound-addCaption="增加"Shortcut={F4}EndBeginVB.Menumn-sound-duceCaption="减少"Shortcut={F5}End第四十二页,共64页。BeginVB.Menumn-sound-muteCaption="静音"Shortcut={F6}EndEndBeginVB.Menumn-timeCaption="时间(&T)"BeginVB.Menumn-time-setCaption="设置时间(&S)"EndEnd第四十三页,共64页。BeginVB.Menumn-screenCaption="屏幕(&S)"BeginVB.Menumn-screen-fullCaption="全屏(&F)"EndEndEnd]第四十四页,共64页。程序代码如下:PrivateSubCheck1-Click()ActiveMovie1.PlayCount=1IfCheck1.Value=1ThenActiveMovie1.PlayCount=0′设置播放时″循环重播″EndIfEndSub第四十五页,共64页。PrivateSubCheck2-Click()ActiveMovie1.AutoRewind=FalseIfCheck2.Value=1ThenActiveMovie1.AutoRewind=True′设置播放时″自动到带″EndIfEndSubPrivateSubmn--Click()OnErrorResumeNext第四十六页,共64页。CommonDialog1.Filter="VideoFile(*.dat)|*.dat|Wave)|*.wav|AVIFile(*.avi)|*.avi|MovieFile.mov)|*.mov|MediaFile(*.mmm)|*.mmm|MidFile(*.mid;.rmi)|*.mid;*.rmi|MPEGFile(*.mpeg)|*.mpeg;*.mpg|AllFile(*.*)|*.*"CommonDialog1.FilterIndex=7CommonDialog1.ShowOpenActiveMovie1.=CommonDialog1.ActiveMovie1.Height=Form1.HeightActiveMovie1.Width=Form1.WidthActiveMovie1.RunEndSub第四十七页,共64页。PrivateSubmn-screen-full-Click()OnErrorResumeNextActiveMovie1.FullScreenMode=True′控制画面为全屏ActiveMovie1.RunActiveMovie1.MovieWindowSize=amvMaximizedEndSubPrivateSubmn-sound-add-Click()ActiveMovie1.Volume=ActiveMovie1.Volume+100′声音音量增大EndSub第四十八页,共64页。PrivateSubmn-sound-duce-Click()ActiveMovie1.Volume=ActiveMovie1.Volume-100′声音音量减小EndSubPrivateSubmn-sound-mute-Click()ActiveMovie1.Volume=-4000′静音EndSub第四十九页,共64页。PrivateSubmn-time-set-Click()OnErrorResumeNextDimRAsIntegerR=InputBox("请输入时间(分钟:0-60)")R=R*60ActiveMovie1.CurrentPosition=Int(R)′控制VCD的开始播放时间ActiveMovie1.RunEndSub第五十页,共64页。PrivateSubOption1-Click()OnErrorResumeNextActiveMovie1.DisplayMode=amvTime′显示方式为时间EndSubPrivateSubOption2-Click()OnErrorResumeNextActiveMovie1.DisplayMode=amvFrames′显示方式为帧EndSub第五十一页,共64页。运行该程序,当我们打开一个VCD文件后,就可看到VCD影片了(如图8.2所示,图中正播放影片《地道战》)。ActiveMovie除了具有上面介绍的属性外,还有以下常用的属性:①AllowChangeDisplayMode:运行时是否允许改变显示的模式。②AllowHideControls:运行时是否允许显示/隐藏控制面板。③AllowHideDisplay:运行时是否允许显示/隐藏显示面板。④Appearance:设置面板的外观(平面或3D)。⑤AutoStart:设置打开VCD文件后是否“自动播放”。第五十二页,共64页。图8.2播放影片《地道战》

第五十三页,共64页。⑥EnableContextMenu:当在画面中右键单击时是否允许出现控制菜单(设成False时可以显示您自行设计的控制菜单)。⑦:设置ActiveMovie播放的文件名。⑧PlayCount:设置播放次数。⑨Rate:设置播放时的速率,其值1时为正常播放,大于1时为快进(太大时可能无声、无影像)。10SelectionStart:设置播放的开始位置(缺省值为0)。11SelectionEnd:设置播放的结束位置(缺省值为-1)。12ShowControls:显示/隐藏控制面板。第五十四页,共64页。13Showdisplay:显示/隐藏显示面板。14ShowpositionControls:在控制面板中显示/隐藏位置按钮。15ShowSelectionControls:

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论