|
在flash6.0以后的版本中,輸出文件時(shí),都提供了壓縮這一選項(xiàng),如果要在程序中獲得flash的內(nèi)容,必須對(duì)flash進(jìn)行解壓縮。它使用的壓縮方法是zlib開放源碼的壓縮方法。從第9個(gè)字節(jié)開始到文件末尾全部進(jìn)行了壓縮,對(duì)其解壓縮也是非常簡(jiǎn)單,可以使用zlib1.dll中提供的uncompress對(duì)其進(jìn)行解壓縮。 具體使用方法,參見zlib的官方網(wǎng)站:http://www. 里面惟一需要注意的是:壓縮和解壓縮的緩沖區(qū)的大小,應(yīng)該是實(shí)際內(nèi)容大小的 1.01倍+12 個(gè)字節(jié)。否則就可能出現(xiàn)錯(cuò)誤。 基本代碼如下:
CFile tmpfile;
DWORD complen=tmpfile.GetLength();
BYTE* header=(BYTE*)::GlobalAlloc(GPTR,8);
tmpfile.Read(header,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 |
|
|
來(lái)自: liujian6916 > 《文檔壓縮》