小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

使用zlib對(duì)swf壓縮文件進(jìn)行解壓縮

 liujian6916 2007-01-07


                                      

在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;


  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

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多