说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

Visual Basic 5.0中实现视频画中画

HTML文档下载 WORD文档下载 PDF文档下载
Visual Basic 5.0中实现视频画中画

在VISUAL BAISC 5.0中可以使用播放视频动画文件(*.AVI)的方法在我们的软件中加入动画效果,但在软件中如何实现视频画中画的效果呢?经笔者摸索,发现利用WIDOWS 95的API函数mciExecute、mciSendString和SetWindowPos可实现这一效果。

下面笔者以最常用的大画面中叠加小画面为例来说明视频画中画的实现方法。

一、建立窗体。进入VISUAL BAISC 5.0系统环境,建立一个新的窗体FORM1。

二、建立视频窗口。在这里笔者使用了一大一小的两个图画框(PictureBox)作为视频窗口。选择控件工具箱中的PictureBox控件,在窗体中拉出两个方框(Picture1和Picture2)。其中Picture1为大画面,播放AVI01.AVI文件;Picture2为小画面,播放AVI02.AVI文件。

三、编写相应控件的脚本。

通用模块:

Declare Function mciExecute Lib "winmm.dll" (ByVal lpstrCommand As String) As Long

Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" (ByVal lpstrCommand As String,ByVal lpstrReturnString As String, ByVal uReturnLength As Long, ByVal hwndCallback As Long) As Long
Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long

FORM1的ACTIVATE过程:

Dim AA As Long

Dim PlayAvi As Long

Dim tmpVal As String

Dim KeyValSize As Long

On Error Resume Next

tmpVal = String$(1024, 0)

KeyValSize = 1024

PlayAvi = mciSendString("STATUS AVI01 READY" + Str(Picture2.hwnd),tmpVal, KeyValSize, 0)

If PlayAvi <> 263 Then

PlayAvi = mciExecute("close AVI01")

End If

tmpVal = String$(1024, 0)

KeyValSize = 1024

PlayAvi = mciSendString("OPEN AVI01.AVI ALIAS AVI01 TYPE AVIVIDEO STYLE CHILD PARENT " + Str(Picture2.hwnd) + " WAIT", tmpVal, KeyValSize, 0)

x1Pos = Picture1.Width

y1Pos = Picture1.Height

tmpVal = String$(1024, 0)

KeyValSize = 1024

AA = mciSendString("STATUS AVI01 WINDOW HANDLE WAIT", tmpVal, KeyValSize, 0)

If (Asc(Mid(tmpVal, KeyValSize, 1)) = 0) Then

tmpVal = Left(tmpVal, KeyValSize - 1)

Else

tmpVal = Left(tmpVal, KeyValSize)

End If

AA = SetWindowPos(tmpVal, 0, 0, 0, x1Pos, y1Pos, 0)

AA = mciExecute("WINDOW AVI01 STATE SHOW")

tmpVal = String$(1024, 0)

KeyValSize = 1024

PlayAvi = mciSendString("STATUS AVI02 READY" + Str(Picture1.hwnd), tmpVal, KeyValSize, 0)

If PlayAvi <> 263 Then

PlayAvi = mciExecute("CLOSE AVI02")

End If

tmpVal = String$(1024, 0)

KeyValSize = 1024

PlayAvi = mciSendString("OPEN AVI02.AVI ALIAS AVI02 TYPE AVIVIDEO STYLE CHILD PARENT " + Str(Picture1.hwnd) + " WAIT", tmpVal, KeyValSize, 0)

x1Pos = Picture2.Width

y1Pos = Picture2.Height

tmpVal = String$(1024, 0)

KeyValSize = 1024

AA = mciSendString("STATUS AVI02 WINDOW HANDLE WAIT", tmpVal, KeyValSize, 0)

If (Asc(Mid(tmpVal, KeyValSize, 1)) = 0) Then

tmpVal = Left(tmpVal, KeyValSize - 1)

Else

tmpVal = Left(tmpVal, KeyValSize)

End If

AA = SetWindowPos(tmpVal, 0, 0, 0, x1Pos, y1Pos, 0)

MciExecute "WINDOW AVI02 STATE SHOW"

MciExecute "PLAY AVI01 REPEAT"

MciExecute "PLAY AVI02 REPEAT"

On Error GoTo 0

FORM1的QueryUnload过程:

mciExecute "STOP AVI01"

mciExecute "STOP AVI02"

mciExecute "CLOSE AVI01"

mciExecute "CLOSE AVI02"

运行此程序可见两个动画同时播放,实现了视频画中画的效果。以上程序在VISUAL BAISC 5.0及WINDOWS 95中运行通过。
iOS开发者必备: 五大编程类工具 多核优化软件MCx释放EMC VNX闪存潜能 手把手教学:详解HTML5移动开发框架PhoneJS 快速学习新技术的几条建议 研发周报:Angular.js or Ember.js 谁将成为Web开发的新宠? 这条C#语句在VB.NET中如何写return (CustoerRow)this.NewRow(); 建议再开设一个就业板块,请大家共同讨论,关系到大家的就业问题! j#中怎么使用datagrid ?给个将动态数据增加到datagrid中的例子。 windows 2000、XP下的计算机启动是选择操作系统的那个配置文件是那个? 请问是如何继承DELPHI自带的某构件,改造它的界面,生成另一构件的? combobox的问题,高手进 菜鸟问题 求教!关于报表打印:使用report form to printer第二次就不能打印? C++中如何引用C文件 怎样用收获造句(用两种不同的意思)? 一辆汽车每小时行50千米,T小时可以行( )千米, 一辆汽车t小时行了s千米,每小时行多少千米?每千米 毫无收获造句 1.Does it m___ a big diff 10年英语六级成绩查询时间是什么时候 一辆汽车t小时行了s千米,每小时行( )千米;行1 用收获的两种意思分别造句 一辆汽车每小时行a千米,t小时共行S千米,则S=( 吴建民:21世纪,世界需要“读懂中国欧洲多国遭强飓风袭击 已共致13人遇评论:平等对话才能改善美伊两国关系伊朗和国际机构就伊核问题对话 外界期美国监听借口难服众 欧洲回应着手协调把全面控烟纳入十三五规划新疆:驼背上的两会宣传队准爸爸体验生娃阵痛 没痛到位就喊遭不我有话说綦江首届樱花节3月19日开幕穿梭在无限废土大影帝世界重组者君临天龙界珠传卢家大屋旅游嘉模圣母堂旅游国际礼拜堂旅游仙岩旅游华盖山旅游
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘