在flash6.0以后的版本中,輸出文件時(shí),都提供了壓縮這一選項,如果要在程序中獲得flash的內容,必須對flash進(jìn)行解壓縮。它使用的壓縮方法是zlib開(kāi)放源碼的壓縮方法。從第9個(gè)字節開(kāi)始到文件末尾全部進(jìn)行了壓縮,對其解壓縮也是非常簡(jiǎn)單,可以使用zlib1.dll中提供的uncompress對其進(jìn)行解壓縮。
具體使用方法,參見(jiàn)zlib的官方網(wǎng)站:http://www.zlib.net
里面惟一需要注意的是:壓縮和解壓縮的緩沖區的大小,應該是實(shí)際內容大小的 1.01倍+12 個(gè)字節。否則就可能出現錯誤。
基本代碼如下:
CFile tmpfile;
tmpfile.Open(filepath,CFile::modeRead);
DWORD complen=tmpfile.GetLength();
BYTE* header=(BYTE*)::GlobalAlloc(GPTR,8);
BYTE* buf=(BYTE*)::GlobalAlloc(GPTR,(complen-8)*1.01+12);
BYTE* bufd=(BYTE*)::GlobalAlloc(GPTR,(filelen-8)*1.01+12);
tmpfile.Read(header,8);
tmpfile.ReadHuge(buf,complen-8);
tmpfile.Close();
unsigned long destlen;//return the value of the destlen.
uncompress(bufd,&destlen,buf,(complen-8)*1.01+12);
//uncompress the swf file and return the destination file length.
header[0]=‘F‘;//change the header indentifier.
CString temp1,temp2;
temp1=filepath.Left(filepath.GetLength()-4);
temp2.Format("~%s$.swf",temp1);
CFile filedes;
filedes.Open(temp2,CFile::modeCreate|CFile::modeWrite);
filedes.Write(header,8);
filedes.Write(bufd,destlen);
filedes.Close();
::GlobalFree(buf);
::GlobalFree(bufd);
return temp2;
- 作者: ar4ever 2006年10月7日, 星期六 20:14
聯(lián)系客服