用VB6的双通道技术获得影碟片断

李志伟4321

李志伟4321

2016-02-19 17:55

生活已是百般艰难,为何不努力一点。下面图老师就给大家分享用VB6的双通道技术获得影碟片断,希望可以让热爱学习的朋友们体会到设计的小小的乐趣。
现在计算机多媒体技术的发展,使影碟无需借助解压卡就可以在电脑中播放,而且由于vcd2.0标准的普及,影碟已经完成了向数字文件化的过渡,完全可以轻松的将任何vcd拷贝到自己的硬盘上欣赏,而无须辛苦娇嫩的光驱.这也为我们截取任何影碟的片断提供了可能.但是目前普遍采用的压缩成AVI文件的办法不仅体积庞大、画面停滞而且速度非常慢。笔者在总结编写文件分割软件的经验基础上,辟出了一条蹊径,即采用双通道技术直接截取影碟文件片断,从根本上克服了上述弊端。
  (一)编程原理;
  一般来说VCD的实际影音文件放在光盘根目录下“MPEGAV”子目录下,文件名为music001.dat或者依次排序,通过对该文件的截取操作,使用户可以保存任何精彩的影碟片断,据作者测算,每十兆字节大约可以播放一分钟,这样,用户可以使用该软件截取任意时间段内的vcd,不过要使用“超级解霸”5.02以上版本播放。
  由于影音文件体积非常大,普通vcd2.0格式60分钟的影音文件长度在600兆以上,因此采用单通道定义二进制数组的办法不仅可靠性差,而且截取较长片断时势必难以实现.笔者采用了双通道技术,即通过定义较小的固定二进制数组,一个通道用来读取,另一个通道用来写入的方法来实现.这其中涉及了复杂的二进制定位技术。
  (二)编程实例;
  (第一步)启动vb6中文版建立一个标准exe工程,将窗体命名为“form1",单击“工程"菜单项目,选择“部件",在部件对话框的“控件"栏目中选择“MICROSOFTWINDOWSCOMMONCONTROLS6.0",确认在它前面的复选框中有一个黑色的对号,单击“确认",添加对该控件的引用.添加6个标签框,4个文本框(由上直下依次排列),3个按钮,一个进度条命名为ba1,一个公用对话框控件命名为cog1,拖动控件到适当位置,界面设计完成后大致如图1所示。其中,“影音文件名称:"标签对应text1,“影音文件长度:"标签对应text2,“截取起始位置:”标签对应text3,“截取长度:”标签对应text4,“截取后文件保存路径:”标签对应text5.设置Label6的BorderStyle=1,“浏览(*.dat)”按钮对应Command1,“保存为(*.dat)"按钮对应Command2,“开始截取"按钮对应Command3。
  双击窗体添加以下代码:
  PrivateSubCommand1_Click()注释:浏览选择文件
  Cog1.FileName=“"注释:清空过期文件名称
  Cog1.Filter=“vcd影碟文件(*.dat)|*.dat"注释:只保留影碟文件
  Cog1.ShowOpen注释:执行打开操作
  IfCog1.FileName""Then注释:如果放弃就忽略操作
  Text1.Text=Cog1.FileName注释:得到被截取文件名
  Label6.Caption=CInt(FileLen(Text1.Text)/2^20)注释:将文件长度转化为兆字节
  EndIf
  EndSub
  PrivateSubCommand2_Click()注释:保存为
  IfText1.Text=“"Then注释:如果未选定影音文件就拒绝操作,显示提示信息
  MsgBox“请首先选择一个被截取的文件!",vbOKOnly+vbExclamation
  ExitSub注释:中断操作
  EndIf
  Cog1.FileName=“"
  Cog1.ShowSave
  IfCog1.FileName“"Then
  Text4.Text=Cog1.FileName注释:保存路径名称
  EndIf
  EndSub
  PrivateSubCommand3_Click()注释:开始截取操作
  Dimerr_descrAsString
  IfText1.Text=“"OrText2.Text=“"OrText3.Text=“"OrText4.Text=“"Then注释:再次验证参数正确性
  MsgBox“请依次输入正确的信息,不要有所遗漏!",vbOKOnly+vbExclamation
  ExitSub注释:如果参数不完整忽略操作
  EndIf
  IfNotjieQU(Text1.Text,Text2.Text,Text3.Text,Text4.Text)Then注释:执行截取失败
  MsgBox“红箭提示信息:"&err_descr,vbOKOnly+vbExclamation注释:返回错误信息
  Else注释:执行截取成功
  MsgBox“红箭提示信息:文件截取操作已经圆满完成!",vbOKOnly+vbExclamation
  EndIf
  EndSub
  PrivateSubForm_Load()
  Me.Caption=App.Title
  Me.Left=(Screen.Width-Me.Width)/2
  Me.Top=(Screen.Height-Me.Height)/2注释:窗体居中
  EndSub
  PrivateSubForm_Unload(CancelAsInteger)
  End注释:结束工程
  EndSub
  (第二步)添加一个模块,输入以下代码:
  OptionExplicit注释:变量检查
  TypeFileSection
  Bytes()AsByte注释:定义关键数组
  EndType
  TypeSectionedFile
  Files()AsFileSection注释:定义辅助数组
  EndType
  PublicFunctionjieQU(YnameAsString,KshiAsLong,CHangAsLong,BnameAsString)AsBoolean注释:定义截取操作函数
  Form1.MousePointer=11注释:设置鼠标指针为漏斗型
  jieQU=True注释:函数成功标志
  DimmlpAsInteger,iAsInteger,zhiAsLong,fnumAsInteger,fnum1AsInteger
  DimshuZUAsLong,myfileAsSectionedFile
  shuZU=2000000注释:定义内存固定数组,长度为2兆
  Kshi=Kshi*2^20
  注释:转换文件指针单位为字节
  CHang=CHang*2^20
  注释:转换文件长度单位为字节
  IfCHangshuZUThen
  注释:如果截取长度太小
  MsgBox“截取的文件长度不能小于2兆字节!",vbOKOnly+vbExclamation
  jieQU=False
  注释:返回操作失败标志,退出操作
  ExitFunction
  EndIf
  IfCInt(CHang/shuZU)=CHang/shuZUThen
  mlp=CInt(CHang/shuZU)
  Else
  mlp=CInt(CHang/shuZU)+1
  EndIf
  注释:计算需要进行操作的次数
  fnum1=FreeFile注释:返回第一个空闲文件通道
  OpenBnameForBinaryAs#fnum1注释:以二进制方式打开影音文件
  ReDimmyfile.Files(1)注释:重新分配内存辅助数组
  WithForm1.Ba1
  .Visible=True
  .Value=0
  .Max=mlp
  .Min=0注释:展示进度条,提示操作进度
  Fori=1Tomlp注释:读取和写入数据
  zhi=Kshi+(-1+i)*shuZU注释:计算第一个二进制通道指针
  IfimlpThen注释:如果不是最后一次操作
  ReDimmyfile.Files(1).Bytes(1ToshuZU)注释:定义主要内存数组2兆字节
  fnum=FreeFile注释:打开第二个空闲文件通道
  OpenYnameForBinaryAs#fnum注释:以二进制方式打开被截取的影音文件
  Seek#fnum,zhi注释:指针定位
  Get#fnum,,myfile.Files(1).Bytes注释:获取数据
  Close#fnum
  Else注释:如果是最后一次操作
  ReDimmyfile.Files(1).Bytes(1To(CHang-(mlp-1)*shuZU))注释:分配主要内存数组大小为最后遗留数据大小
  fnum=FreeFile
  OpenYnameForBinaryAs#fnum
  Seek#fnum,zhi注释:定位指针
  Get#fnum,,myfile.Files(1).Bytes
  Close#fnum
  EndIf
  Put#fnum1,,myfile.Files(1).Bytes注释:以二进制方式写入保存文件
  .Value=i注释:进度条开始运行
  Next注释:循环直到操作次数全部执行
  Close#fnum1注释:关闭文件通道
  .Visible=False注释:隐藏进度条
  EndWith
  Form1.MousePointer=0注释:还原鼠标指针指针
  EndFunction
  (第三步)运行调试工程,如图2。
  (第四步)编译。
  怎么样,现在一个精致的非常实用的先进的(不是夸口)vcd截取软件已经制作成功了(如图3),你现在可将那些什么avi压缩工具放进回收站了。心动不如行动,此程序在vb6.0中文企业版/windows98中调试通过,如果你用的是vb5.0那么也不用担心,你只用将第一步中对部件的引用改为“MICROSOFTWINDOWSCOMMONCONTROLS5.0"即可。->

展开更多 50%)
分享

猜你喜欢

用VB6的双通道技术获得影碟片断

编程语言 网络编程
用VB6的双通道技术获得影碟片断

用VB6创建MTS组件

ASP
用VB6创建MTS组件

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

双通道内存介绍什么是双通道内存?

电脑入门
双通道内存介绍什么是双通道内存?

用VB6编写强力的windows隐藏引擎

编程语言 网络编程
用VB6编写强力的windows隐藏引擎

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

用VB6读写数据库中的图片

vb
用VB6读写数据库中的图片

VB6中的FSO对象模型

编程语言 网络编程
VB6中的FSO对象模型

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

如何从SOUND.DRV中提取声音

如何从SOUND.DRV中提取声音

巧用Windows 7备份与还原功能

巧用Windows 7备份与还原功能
下拉加载更多内容 ↓