用VB6的双通道技术获得影碟片断
2008-04-09 04:41:57来源:互联网 阅读 ()
(一)编程原理;
一般来说VCD的实际影音文件放在光盘根目录下“MPEGAV”子目录下,文件名为music001.dat或者依次排序,通过对该文件的截取操作,使用户可以保存任何精彩的影碟片断,据作者测算,每十兆字节大约可以播放一分钟,这样,用户可以使用该软件截取任意时间段内的vcd,不过要使用“超级解霸”5.02以上版本播放。
由于影音文件体积非常大,普通vcd2.0格式60分钟的影音文件长度在600兆以上,因此采用单通道定义二进制数组的办法不仅可靠性差,而且截取较长片断时势必难以实现.笔者采用了双通道技术,即通过定义较小的固定二进制数组,一个通道用来读取,另一个通道用来写入的方法来实现.这其中涉及了复杂的二进制定位技术。
(二)编程实例;
(第一步)启动vb6中文版建立一个标准exe工程,将窗体命名为“form1",单击“工程"菜单项目,选择“部件",在部件对话框的“控件"栏目中选择“MICROSOFT WINDOWS COMMON CONTROLS 6.0",确认在它前面的复选框中有一个黑色的对号,单击“确认",添加对该控件的引用.添加6个标签框,4个文本框(由上直下依次排列),3个按钮,一个进度条命名为ba1,一个公用对话框控件命名为cog1,拖动控件到适当位置,界面设计完成后大致如图1所示。其中, “影音文件名称:"标签对应text1,“影音文件长度:"标签对应text2,“截取起始位置:”标签对应text3,“截取长度:”标签对应text4,“截取后文件保存路径:”标签对应text5.设置Label6的BorderStyle = 1,“浏览(*.dat)”按钮对应Command1 ,“保存为(*.dat)"按钮对应Command2 ,“开始截取"按钮对应Command3 。
双击窗体添加以下代码:
Private Sub Command1_Click() 注释:浏览选择文件
Cog1.FileName = “" 注释:清空过期文件名称
Cog1.Filter =“vcd影碟文件(*.dat)|*.dat" 注释:只保留影碟文件
Cog1.ShowOpen 注释:执行打开操作
If Cog1.FileName <> "" Then 注释:如果放弃就忽略操作
Text1.Text = Cog1.FileName 注释:得到被截取文件名
Label6.Caption = CInt(FileLen(Text1.Text) / 2 ^ 20)
注释:将文件长度转化为兆字节
End If
End Sub
Private Sub Command2_Click() 注释:保存为
If Text1.Text = “" Then
注释:如果未选定影音文件就拒绝操作,显示提示信息
MsgBox “请首先选择一个被截取的文件!", vbOKOnly + vbExclamation
Exit Sub 注释:中断操作
End If
Cog1.FileName = “"
Cog1.ShowSave
If Cog1.FileName <> “" Then
Text4.Text = Cog1.FileName 注释:保存路径名称
End If
End Sub
Private Sub Command3_Click() 注释:开始截取操作
Dim err_descr As String
If Text1.Text = “" Or Text2.Text = “" Or Text3.Text = “" Or Text4.Text = “" Then
注释:再次验证参数正确性
MsgBox “请依次输入正确的信息,不要有所遗漏!", vbOKOnly + vbExclamation
Exit Sub 注释:如果参数不完整忽略操作
End If
If Not jieQU(Text1.Text, Text2.Text, Text3.Text, Text4.Text) Then
注释:执行截取失败
MsgBox “红箭提示信息:" & err_descr, vbOKOnly + vbExclamation
注释:返回错误信息
Else 注释:执行截取成功
MsgBox“红箭提示信息:文件截取操作已经圆满完成!", vbOKOnly + vbExclamation
End If
End Sub
Private Sub Form_Load()
Me.Caption = App.Title
Me.Left = (Screen.Width - Me.Width) / 2
Me.Top = (Screen.Height - Me.Height) / 2 注释:窗体居中
End Sub
Private Sub Form_Unload(Cancel As Integer)
End 注释:结束工程
End Sub
(第二步)添加一个模块,输入以下代码:
Option Explicit 注释:变量检查
Type FileSection
Bytes() As Byte 注释:定义关键数组
End Type
Type SectionedFile
Files() As FileSection 注释:定义辅助数组
End Type
Public Function jieQU(Yname As String, Kshi As Long, CHang As Long, Bname As String) As Boolean 注释:定义截取操作函数
Form1.MousePointer = 11 注释:设置鼠标指针为漏斗型
jieQU = True 注释:函数成功标志
Dim mlp As Integer, i As Integer, zhi As Long, fnum As Integer, fnum1 As Integer
Dim shuZU As Long, myfile As SectionedFile
shuZU = 2000000 注释:定义内存固定数组,长度为2兆
Kshi = Kshi * 2 ^ 20
注释:转换文件指针单位为字节
CHang = CHang * 2 ^ 20
注释:转换文件长度单位为字节
If CHang < shuZU Then
注释:如果截取长度太小
MsgBox “截取的文件长度不能小于2兆字节!", vbOKOnly + vbExclamation
jieQU = False
注释:返回操作失败标志,退出操作
Exit Function
End If
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash