所谓动态画中画,指的是在大画面视频播放时,小画面在大画面中也播放另外的画面,或者是两个画面都在做某种活动。
笔者前段时间用VisualBasic开发了一个vcd播放程序,可以实现以下功能:
(1)可以多屏播放,也就是画中画功能,可同时播放几个不同的画面;
(论文网2)可以同时播放cd-rom中的视频音频文件(当然,在硬盘中播放速度会更快些)
(3)支持多种文件格式(如。dat。。wav。。avi。。mov。。mmm。。mid。。rmi。。mpg。。mpa。。mpv等);
(4)自带画面美观且功能齐全的cd播放程序;
(5)增强了鼠标的右键功能,用它可以控制各画面的大小(1/16。1/4。1/2。1。2倍和全屏)。播放。暂停等;
(6)控制声音。图像。时间/帧显示转换。自动重播等;
(7)控制条随意拖动播放,再加上定时播放。自定义播放时间等播放方式,可使您更加惬意地控制vcd;
(8)屏幕可随意拖动,画面可任意放缩。
vcd中的影像文件都在光盘的mpegav目录下,文件名只有两种:avxeq01。dat或music01。dat(如果是音乐版的卡拉ok,则还有music02。dat等。)
可视动画控件activemovie是microsoft公司的控件,从不成熟的1。0。1。2到2。0,每次都有了很大的改进,如1。0版本中有几个属性是只读的(例如,displaymode只能为amvtime,而不能改为amvframes)。该控件支持音频文件(。wav。。mid。。rmi)。影片文件(。avi。。mov。。mmm。。mpeg。。mpg。。mpa。。mpv)和vcd文件(。dat)等。播放时若用鼠标右键单击画面,则可以直接对画面的播放。暂停。停止等进行控制,读者还可以自行在属性“栏中对影片播放进行控制设置,诸如设置播放次数“。音量“。影片大小(1/16。1/4。1/2。1。2倍和全屏“。面板“。颜色“。过滤器“等。这种技术的实现实际上是vb调用activemovie控制器来完成的,而activemovie控制器内嵌了microsoftmpeg音频解码器和microsoftmpeg视频解码器。
首先,我们建立一个项目“,依次选择项目/部件“,然后添加microsoftactivemoviecontrol(amovie。ocx)。microsoftcommandialogcontrol(comdlg32。ocx),控件即出现在工具箱“中。将上述两个控件加进窗体,再单击菜单“工具栏,建立一个主菜单项:文件“(file)及其子菜单项:打开a画面“(opena)。
在opena中加入如下代码:
privatesubopena-click()
onerrorresumenext
commondialog1。filter=“videofile(星号。dat)∣星号。dat∣wavefile(星号。wav)∣avifile(星号。avi)∣(星号。avi)∣moviefile(星号。mov)∣(星号。mov)∣mediafile(星号。mmm)∣(星号。mmm)∣midfile(星号。mid;星号。rmi)∣(星号。mid;星号。rmi)∣mpegfile(星号。mpeg)∣(星号。mpeg)∣allfile(星号。星号)∣星号。星号“
commondialog1。filterindex=1
commondialog1。showopen
activemove1。filename=commondialog1。filename
activemove1。height=form1。height
activemove1。width=form1。width
activemove1。run
endsub
这是对单个的activemovie1进行控制。还可以在文件“(file)中依次加入子菜单:打开b画面“(openb)。打开c画面“(openc),并相应地加入activemovie2。activemovie3等多个画面,将上述程序代码略为改动后加入。这样,当您按下f5键即运行程序,打开您想要播放的vcd文件就可以欣赏vcd了。在屏幕上单击右键,还可以控制画面呢!
现在是否就满足了呢?不行!我们再增加一个用鼠标任意拖动屏幕的功能:
privatesubactivemovie1-mousedown(buttonasinteger,shiftasinteger,xassingle,yassingle)
activemovie1。drag1
x1=x
y1=y
endsub
我们还增加了一个定义任意播放时间的主菜单项:时间“(time)及其子菜单项:画面a时间“(settimea):
privatesubsettimea-click()
onerrorresumenext
dimrasinteger
r=inputbox(“请输入时间(分钟:0-60)“)
r=r星号60
activemovie1。currentposition=int(r)
activemovie1。run
endsub
currentposition是控制vcd播放的时间:(1)activemovie1。currentposition=0(从头开始);(2)activemovie1。currentposition=900(15分钟后);(3)activemovie1。currentpo-sition=1800(30分钟后)。依次类推,但是不能超过60分钟。
我们再增加一个主菜单项:屏幕“(screen)及其子菜单项:全屏a“(fullscreena),用来控制屏幕大小:
privatesubfullscreena-click()
onerrorresumenext
activemovie1。fullscreenmode=true
activemovie1。run
activemovie1。moviewindowsize=amvmaximized
endsub
fullscreenmode用来控制画面是否为全屏,当它为true时则全屏方式播放vcd,为false时则取消全屏方式。
moviewindowsize也是控制屏幕的大小:(1)全屏大小:activemovie1。moviewindow-size=amvmaximized;(2)正常大小:activemovie1。moviewindowsize=amvoriginalsize;(3)倍屏:activemovie1。moviewindowsize=amvdoubleoriginalsize;(4)1/2屏:activemovie1。moviewindowsize=amvonehalscreen;(5)1/4屏:activemovie1。movie-windowsize=amvonefourthscreen;(6)1/16屏:activemovie1。moviewindowsize=amvonesixteenscreen。
我们可以随意控制屏幕了。下面,让我们再把声音控制一下吧!
microsoftactivemovie控件2。0版的确比1。2。1。0改善不少!1。2。1。0版在我的创新awe64顶级声卡中的表现很不尽人意,但2。0版却把我拉科达“音箱功能在创新awe64的驱动下发挥得淋漓尽致!想必microsoft公司对activemovie控制器中内嵌的mpeg音频解码器下了苦功!
我们在菜单中增加主菜单项:声音“及其子菜单项增加“(soundadd棗快捷键设置为f4)和减少“(soundduce棗快捷键设置为f5),分别用来控制声音的增强:
privatesubsoundadd-click()
activemovie1。volume=activemovie1。volume+100
endsub
privatesubsoundduce-click()
activemovie1。volume=activemovie1。volume-100
endsub
当然,我们还想增加静音“(soundno)功能。经我反复试验,当activemovie1。volume=-4000时效果最好!
我们还需要让vcd播放完后乖乖地自动重播“(autoreplay):
privatesubautoreplay-click()
activemovie1。autorewind=true
’autorewind设置播放时是否自动播放“
endsub
为了让vcd播放时交替显示帧“(showframe)或显示时间“(showtime),可在displaymode中进行设置:
privatesubshowframe-click()
onerrorresumenext
activemovie1。displaymode=amvframes
endsub
privatesubshowtime-click()
onerrorresumenext
activemovie1。displaymode=amvtimes
endsub
经过上面的设计,功能也凑合了。行了吗?别急!我们还想将界面搞得漂亮一点。例如,增加工具栏,加强鼠标右键的功能和画面中的双击功能等。
[1][2]下一页
用VisualBasic实现多画面播放功能【1344字】:http://www.youerw.com/jisuanji/lunwen_158491.html