700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 获取Flash动画文件SWF的图像帧宽度 高度和Flash播放速率

获取Flash动画文件SWF的图像帧宽度 高度和Flash播放速率

时间:2020-12-31 12:52:12

相关推荐

获取Flash动画文件SWF的图像帧宽度 高度和Flash播放速率

前不久,研究了Flash动画文件SWF的数据结构,喜欢编写Flash播放器的朋友可以借鉴。SWF文件开头三个字节为“FWS”(表示未压缩过),或者为“CWS”(表示从第9个字节起的数据用Zlib压缩过)。第4个字节为Flash的版本号,5-8字节为SWF源文件字节大小(压缩前的),第9个字节为Flash的宽度与高度控制码,控制码的不同,后面存储宽度与高度的数据区所占的字节长度也不一样。程序如下(zlibwapi.dll可以到网上去下载一个):

类文件:Getswffilesize.cls

Option ExplicitPrivate Declare Function GetShortPathName Lib "kernel32" Alias "GetShortPathNameA" (ByVal lpszLongPath As String, ByVal lpszShortPath As String, ByVal cchBuffer As Long) As LongPrivate Declare Function compressAPI Lib "zlibwapi.dll" Alias "compress" (ByRef dest As Any, ByRef destLen As Long, ByRef Source As Any, ByVal sourceLen As Long) As LongPrivate Declare Function compressBound Lib "zlibwapi.dll" (ByVal sourceLen As Long) As LongPrivate Declare Function uncompressAPI Lib "zlibwapi.dll" Alias "uncompress" (ByRef dest As Any, ByRef destLen As Long, ByRef Source As Any, ByVal sourceLen As Long) As LongPrivate Declare Function adler32 Lib "zlibwapi.dll" (ByVal adler As Long, ByRef buf As Any, ByVal length As Long) As LongPrivate Declare Function crc32 Lib "zlibwapi.dll" (ByVal crc As Long, ByRef buf As Any, ByVal length As Long) As LongPrivate Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal length As Long)Private Const Z_OK As Long = &H0&Private Const Z_ERROR As Long = -&H1&Private Const Z_BUF_ERROR As Long = -&H5&规定字符串长度为2Private Function Definestrlen(ByVal s As String) As StringIf Len(s) < 2 Thens = "0" & sElses = sEnd IfDefinestrlen = sEnd Function取得Flash动画文件SWF帧的分辨率大小、播放速率大小Public Function GetFlashFileSize(ByVal SWFfile As String, ByRef SWFWidth As Long, ByRef SWFHeight As Long, ByRef SWFPlayRate As Double) As LongDim FNum As Long, Temp As String, i As LongDim refBuffer() As Byte, destBuffer() As Byte, origBytes() As ByteDim origSize As Long 源文件字节大小Dim FlashW As Long, FlashH As Long Flash宽度,高度Dim Flashrate As Double Flash播放速率Dim OutCRC As Long CRC32校验If Not fileExist(SWFfile) Then Exit Function 文件不存在则退出将长文件名转换成短文件名Temp = String(LenB(SWFfile), Chr(0))GetShortPathName SWFfile, Temp, Len(Temp)Temp = Left(Temp, InStr(Temp, Chr(0)) - 1)FNum = FreeFile()Open Temp For Binary Access Read Lock Write As #FNumReDim refBuffer(0 To (LOF(FNum) - 1)) As ByteReDim destBuffer(0 To UBound(refBuffer) - 8)Get #FNum, , refBuffer() 取得文件所有内容Get #FNum, 9, destBuffer() 取得压缩字节流(文件头为CWS)Close #FNumIf Hex$(refBuffer(0)) = "46" And Hex$(refBuffer(1)) = "57" And Hex$(refBuffer(2)) = "53" Then文件头为FWSDebug.Print "文件头为FWS"Temp = ""Select Case Hex$(refBuffer(8))Case "50"For i = 9 To 13Temp = Temp & Definestrlen(Hex$(refBuffer(i)))Hex$(refBuffer(9)) & Hex$(refBuffer(10)) & Hex$(refBuffer(11)) & Hex$(refBuffer(12)) & Hex$(refBuffer(13))NextFlashW = CLng("&H" & Definestrlen(Hex$(refBuffer(9))) & Definestrlen(Hex$(refBuffer(10)))) / 10FlashH = CLng("&H" & Mid$(Temp, 6, 4)) / 10Flashrate =

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。