还原Flash MX中压缩格式的SWF文件程序源代码还原Flash MX中压缩格式的SWF文件程序源代码
? Flash深入研究之四——编程还原Flash MX中压缩格式的SWF文件
————————————————以下为程序代码—————————————
unit c2f_u1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, zlib;
type
TMain = class(TForm) ...
还原Flash MX中压缩
的SWF文件程序源代码
? Flash深入研究之四——编程还原Flash MX中压缩格式的SWF文件
————————————————以下为程序代码—————————————
unit c2f_u1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, zlib;
type
TMain = class(TForm)
Button1: TButton;
Label3: TLabel;
Label1: TLabel;
Label2: TLabel;
OpenDialog1: TOpenDialog;
Button2: TButton;
SaveDialog1: TSaveDialog;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
FileLength : LongWord; //SWF文件尺寸
FileBuf : Array of Byte; //将SWF文件读入内存存放
end;
var
Main: TMain;
implementation
{$R *.dfm}
procedure TMain.Button1Click(Sender: TObject);
var
f,fw : File;
fws : string[3]; //标示信息
version : Byte; //SWF文件版本号
CurrentPos : Integer; //内存读写位置
zStream : TDecompressionStream; //实现压缩数据还原
inStream : TMemoryStream; //压缩数据流
begin
if not OpenDialog1.Execute then exit;
FileMode:=fmOpenRead;
AssignFile(f,OpenDialog1.FileName);
Reset(f,1);
SetLength(FileBuf,FileSize(f));
BlockRead(f,FileBuf[0],Filesize(f)); //将文件读入内存
CloseFile(f);
//下面为读取SWF文件的文件头Header部分
CurrentPos:=0;
//读取'FWS'标示
SetLength(fws,3); Move(FileBuf[CurrentPos],fws[1],3); Inc(CurrentPos,3);
if fws<>'CWS' then begin
SetLength(FileBuf,0);
ShowMessage('该文件不是Flash SWF压缩文件!');
exit;
end;
//读取版本号
Move(FileBuf[CurrentPos],version,Sizeof(version));
Inc(CurrentPos,Sizeof(version));
if Version<5 then begin
SetLength(FileBuf,0);
ShowMessage('该SWF文件不是Flash 5以上版本,本程序当前仅识别Flash 5以上格式SWF文件!');
exit;
end;
//读取SWF文件长度
Move(FileBuf[CurrentPos],FileLength,Sizeof(FileLength));
Inc(CurrentPos,Sizeof(FileLength));
//FileBuf下面的内容都是压缩数据
inStream:=TMemoryStream.Create;
//将压缩数据读入inStream压缩数据流
inStream.Write(FileBuf[CurrentPos],Length(FileBuf)-3-Sizeof(version)-Sizeof(File
Length));
inStream.Position:=0;
//实现还原
zStream:=TDecompressionStream.Create(inStream);
//数据还原后所需缓冲区长度会加长
SetLength(FileBuf,FileLength);
//将还原的数据写回缓冲区
zStream.Read(FileBuf[3+Sizeof(version)+Sizeof(FileLength)],FileLength-3-Sizeof(v
ersion)-Sizeof(FileLength));
zStream.Free;
inStream.Free;
fws:='FWS';
//将原CWS改为FWS
Move(fws[1],FileBuf[0],3);
//此时将缓冲区数据存盘就是SWF的还原文件
ShowMessage('压缩数据已经实现还原,请存盘~');
if not SaveDialog1.Execute then exit;
ReWrite(fw,1);
BlockWrite(fw,FileBuf[0],Length(FileBuf));
CloseFile(fw);
SetLength(FileBuf,0);
end;
procedure TMain.Button2Click(Sender: TObject); begin
Close;
end;
end.
本文档为【还原Flash MX中压缩格式的SWF文件程序源代码】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。