电信主站 网通分站
购买流程 付款方式 常见问题 在线提问 续租服务 购物车
用户名: 密 码: 忘记密码?
首 页
域名注册
虚拟主机
双线主机
服务器租用
VPS主机
企业邮局
代理专区
客服中心
虚拟主机行业资讯 虚拟主机评测对比 互联网最新动态 技术学院 站长资讯 在线教程 网站运营
搜索优化 服务器 网络编程 图形图象 站长之家 网页制作 操作系统
冲浪宝典 软件教学 视频通信 办公软件 邮件系统 网络安全 认证考试
您当前位置:西部数码->资讯中心-> 站长之家-> 站长心得
用vb6的双通道技术获得影碟片断_visualbasic教程
作者:网友供稿 点击:0
  西部数码-全国虚拟主机10强!20余项虚拟主机管理功能,全国领先!第6代双线路虚拟主机,南北访问畅通无阻!虚拟主机可在线rar解压,自动数据恢复设置虚拟目录等.虚拟主机免费赠送访问统计,企业邮局.Cn域名注册10元/年,自助建站480元起,免费试用7天,满意再付款!P4主机租用799元/月.月付免压金!
文章页数:[1] 
现在计算机多媒体技术的发展,使影碟无需借助解压卡就可以在电脑中播放,而且由于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
  注释:转换文件长度单位为字节
  IfCHang<shuZUThen
  注释:如果截取长度太小
  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注释:计算第一个二进制通道指针
  Ifi<mlpThen注释:如果不是最后一次操作
  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"即可。->


文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!
相关主题
文章页数:[1] 
Google
热门文章
·最差的用户体验真的是不知道该"做什么"吗?_站长心得
·做完网站别忘调试----网站调试全攻略2_站长心得
·八大要领 做网站就这么简单2_站长心得
·八大要领 做网站就这么简单3_站长心得
·初学网站制作须知道什么是静态网页_站长心得
·高分辨率下界面布局的解决方案1_站长心得
·高分辨率下界面布局的解决方案2_站长心得
·高分辨率下界面布局的解决方案3_站长心得
·高分辨率下界面布局的解决方案4_站长心得
·网页切片算法的若干问题_站长心得

最新文章
·新手必看之网站的定位篇_站长心得
·站长如何做好自己的客服中心_站长心得
·买卖中小网站交易的一些细节问题_站长心得
·为什么成功的论坛和博客无法双管其下_站长心得
·像我一样的菜鸟站长常犯的几种错误_站长心得
·桌面壁纸站的建设_站长心得
·谈谈我的下载站日ip5000 月收入3000的经验_站长心得
·如何来做好你的第一个网站_站长心得
·专业的网站流量快速提升的方法_站长心得
·谈谈三年来做站的经验_站长心得


 
 


版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!

特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
  打印  刷新  关闭
返回首页 |关于我们 | 联系我们 | 付款方式 | 创业联盟 | 虚拟主机 | 资讯中心 | 友情链接 | 网站地图

版权所有 西部数码(www.west263.com)
CopyRight (c) 2002~2006 west263.com all right reserved.
公司地址:四川成都市万和路90号天象大厦4楼 邮编:610031
电话总机:028-86262244 86263048 86263408 86263960 86264018 86267838
售前咨询:总机转201 202 203 204 206 208
售后服务:总机转211 212 213 214
财务咨询:总机转224 223 传真:028-86264041 财务QQ:点击发送消息给对方635483282
售前咨询QQ:点击发送消息给对方2182518 点击发送消息给对方241975952 点击发送消息给对方275026793 点击发送消息给对方408235859
售后服务QQ:点击发送消息给对方17708515 点击发送消息给对方307742704 点击发送消息给对方287976517 点击发送消息给对方363783715
《中华人民共和国增值电信业务经营许可证》编号:川B2-20030065号