`
hagensas
  • 浏览: 12630 次
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

swf与exe转换 摘抄

阅读更多
转自:CSDN
初次接触这个问题是为了完善我自己做的flashplayerV1.02的最后一个功能,也就是EXE<->SWF的转换功能.当时并不知道文件转换机制是什么,更对SWF文件格式也一窍不通.^_^我相信也有好多朋友和我遇到了一样的问题吧,以下就我自己积累的一些经验,以及别人对我的帮助.来谈一谈这个问题.
首先.我们来看一下SWF文件头格式:(以下为我的资料收集)
以一个实际的SWF文件头为例:
46 57 53 05 B4 66 07 00 70 00 0F A0 00 00 BB 80
00 0C 9F 03
字节 1-3 (46 57 53): SWF文件头标志,FWS表示未压缩,CWS表示压缩的SWF文件,需要从第9个字节起用ZLib解压
字节 4 (05): Flash文件的版本,这里表明它是用Flash5生成的
字节 5-8 (B4 66 07 00):一个Integer表示文件的长度,低在前,高在后,这里是$000766B4 = 485044字节,这里应该等于未压缩的SWF文件实际大小或压缩过的SWF解压后的长度+文件头(8字节)
字节 9 - 。。。: SWF显示区域,(左上角坐标,右下角坐标),用下面的方法计算得到:第9字节前5位(70 shr 3 = 14),以后的字节以14位进行分割,所需位数为 14*4+5 = 61,需要 8 个字节来表示,那么:
70 00 0F A0 00 00 BB 80
01110 00000000000 00001111 10100000 00000000 0000000 010111011 10000000
01110 00000000000000 01111101000000 00000000000000 01011101110000 000
14 0 8000 0 6000
因为Flash的坐标是TWIP格式的,需要除以20的,所以实际为(0,400,0,300)
接下来的两字节 (00 0C):表示帧速率,前一字节表示小数位,后一字节表示整数位,不过一般极少有小数位的帧率,所以一般我们只计整数就可以了,这里 $0C = 12,即每秒12帧再接下来的两字节 (9F 03):表示总帧数,WORD类型,$039F=927帧,与ShockwaveFlash.TotalFrames 得到的数值是一样的。
再后面的数据是SWF的实体数据
接着:我们来看EXE文件的真正面目.其实EXE的SWF并不存在什么文件格式转换的问题,SWF文件之所以能变为EXE文件,无非是加入了一些流的操作罢了.下面让我们看看EXE文件的由来,简单的说: EXE格式的SWF文件不过是一个Flash播放器程序后面跟着一个SWF文件,两个文件写在一起,然后再在文件末尾写入SWF文件的大小和“FA123456”标示。故SWF->EXE的转换机制其实就这么简单.
而EXE->SWF呢,无非就是从文件末尾得到内嵌的SWF文件大小,然后新建一个空白的扩展名为.swf的文件,把内嵌的SWF文件写入这个新文件就可以了!
明白的这些以后,我想就SWF与EXE的转换也就不难了吧.(关键是一些流操作)
以下我给出一些流操作的函数及用法:
一、Delphi中流的基本概念及函数声明
在Delphi中,所有流对象的基类为TStream类,其中定义了所有流的共同属性和方法。
TStream类中定义的属性介绍如下:
1、Size:此属性以字节返回流中数据大小。
2、Position:此属性控制流中存取指针的位置。
Tstream中定义的虚方法有四个:
1、Read:此方法实现将数据从流中读出。函数原形为:
Function Read(var Buffer;Count:Longint):Longint;virtual;abstract;
参数Buffer为数据读出时放置的缓冲区,Count为需要读出的数据的字节数,该方法返回值为实际读出的字节数,它可以小于或等于Count中指定的值。
2、Write:此方法实现将数据写入流中。函数原形为:
Function Write(var Buffer;Count:Longint):Longint;virtual;abstract;
参数Buffer为将要写入流中的数据的缓冲区,Count为数据的长度字节数,该方法返回值为实际写入流中的字节数。
3、Seek:此方法实现流中读取指针的移动。函数原形为:
Function Seek(Offset:Longint;Origint:Word):Longint;virtual;abstract;
参数Offset为偏移字节数,参数Origint指出Offset的实际意义,其可能的取值如下:
soFromBeginning:Offset为移动后指针距离数据开始的位置。此时Offset必须大于或者等于零。
soFromCurrent:Offset为移动后指针与当前指针的相对位置。
soFromEnd:Offset为移动后指针距离数据结束的位置。此时Offset必须小于或者等于零。该方法返回值为移动后指针的位置。
4、Setsize:此方法实现改变数据的大小。函数原形为:
Function Setsize(NewSize:Longint);virtual;
另外,TStream类中还定义了几个静态方法:
1、ReadBuffer:此方法的作用是从流中当前位置读取数据。函数原形为:
Procedure ReadBuffer(var Buffer;Count:Longint);
参数的定义跟上面的Read相同。注意:当读取的数据字节数与需要读取的字节数不相同时,将产生EReadError异常。
2、WriteBuffer:此方法的作用是在当前位置向流写入数据。函数原形为:
Procedure WriteBuffer(var Buffer;Count:Longint);
参数的定义跟上面的Write相同。注意:当写入的数据字节数与需要写入的字节数不相同时,将产生EWriteError异常。
3、CopyFrom:此方法的作用是从其它流中拷贝数据流。函数原形为:
Function CopyFrom(Source:TStream;Count:Longint):Longint;
参数Source为提供数据的流,Count为拷贝的数据字节数。当Count大于0时,CopyFrom从Source参数的当前位置拷贝Count个字节的数据;当Count等于0时,CopyFrom设置Source参数的Position属性为0,然后拷贝Source的所有数据;
TStream还有其它派生类,其中最常用的是TFileStream类。使用TFileStream类来存取文件,
首先要建立一个实例。声明如下:
constructor Create(const Filename:string;Mode:Word);
Filename为文件名(包括路径),参数Mode为打开文件的方式,它包括文件的打开模式和共享模式,其可能的取值和意义如下:

打开模式:
fmCreate :用指定的文件名建立文件,如果文件已经存在则打开它。
fmOpenRead :以只读方式打开指定文件
fmOpenWrite :以只写方式打开指定文件
fmOpenReadWrite:以写写方式打开指定文件
共享模式:
fmShareCompat :共享模式与FCBs兼容
fmShareExclusive:不允许别的程序以任何方式打开该文件
fmShareDenyWrite:不允许别的程序以写方式打开该文件
fmShareDenyRead :不允许别的程序以读方式打开该文件
fmShareDenyNone :别的程序可以以任何方式打开该文件

TStream还有一个派生类TMemoryStream,实际应用中用的次数也非常频繁。它叫内存流,就是说在内存中建立一个流对象。它的基本方法和函数跟上面是一样的。
好了,有了上面的基础后,我们就可以开始我们的编程之行了。
以下先给出一个EXE->SWF过程:
procedure exe2swf( exeName,swfName: String);
var
// 分别处理EXE、SWF文件的文件流
SourStream,DestStream : TFileStream;
// SWF文件的大小
SwfFileSize : Cardinal;
i, j : Integer;
begin
// 打开EXE形式的源文件
SourStream :=TFileStream.Create( exeName, fmOpenRead or fmShareExclusive );
Try
// 读取文件标志
SourStream.Seek( -2*SizeOf(Integer), soFromEnd );
SourStream.ReadBuffer( SwfFileSize, SizeOf(Integer) );
// 判断读到的文件标志是否和FA123456相同
//判断是否是Macromedia官方格式的Flash文件
if SwfFileSize=$FA123456 then
begin
SourStream.ReadBuffer( SwfFileSize, SizeOf(SwfFileSize) );
SourStream.Seek( -SwfFileSize -2*SizeOf(Integer), soFromEnd );
// 打开目标SWF文件
DestStream :=TFileStream.Create( swfName, fmCreate );
Try
// 从EXE文件流中读取数据
DestStream.CopyFrom( SourStream, SwfFileSize );
ShowMessage( '转换成功。' );
Finally
//释放文件流
DestStream.Free;
end;
end
else begin
ShowMessage( '无法识别的EXE格式Flash影片。' );
end;
finally
//释放文件流
SourStream.Free;
end;
end;
以上就是EXE->SWF文件的全过程了,调用时如:exe2swf(edit1.Text,'1.swf')即将Edit文本框中的路径所指向的EXE文件转换为了当前目录下文件名为:1.SWF的文件了.
有了上面的知识,SWF->EXE的方法,我在这里也就不在重复了.哈哈.其实也很简单.到此一个简单的转换过程也就完成了,大家不妨都自己动手做一做,希望能对大家有所帮助。
(注:对于一些非官方的EXE格式的Flash文件,不一定存在$FA123456标志,故有时也可能不能识别其格式。)
分享到:
评论

相关推荐

    swf2exe转换破解版

    swf2exe转换破解版

    SWF和EXE转换.rar

    标题中的“SWF和EXE转换”指的是将Flash动画文件(.SWF)转换成可执行文件(.EXE)的过程。在IT行业中,这种转换可能出于多种原因,例如便于在没有Flash Player的环境中播放SWF内容,或者为了保护内容不被轻易复制。...

    SWF2EXE转换工具

    标题中的“SWF2EXE转换工具”是指一种软件,它的主要功能是将SWF文件(ShockWave Flash)转换成可执行的EXE文件。SWF文件是Adobe Flash技术创建的动画或交互式内容,通常用于网页上的多媒体展示。而EXE文件则是...

    swf转换exe/exe转换swf

    下面将详细讲解SWF与EXE之间的转换,以及相关的知识点。 首先,SWF文件是Adobe Flash开发的,主要用于在网页上展示动画、游戏和其他互动内容。它们通常包含矢量图形、音频、视频和ActionScript代码,使得用户能够在...

    swf to exe转换器

    5. **用户体验**:转换后的EXE文件应保持与原SWF文件相似的用户体验,包括动画效果、交互性以及用户界面。 6. **自启动与退出**:转换器需要处理SWF文件的启动和退出逻辑,确保程序能够正确地开始执行和关闭。 7. ...

    swf2exe文件格式转换器

    3. **转换过程**:软件解析SWF文件内容,并将其与必要的运行时库结合,生成EXE文件。 4. **输出与验证**:转换完成后,用户可以在指定的输出目录找到新的EXE文件,进行测试以确认能否正确运行。 **安全性与兼容性**...

    易语言SWF和EXE转换

    本资源主要关注的是SWF(ShockWave Flash)文件与EXE(可执行文件)之间的转换,以及字节集到数值的转换,这些都是易语言(EasyLanguage)环境下进行程序开发时可能遇到的问题。易语言作为一款中国本土开发的编程...

    swf转exe 转换器

    "swf转exe转换器"是一款工具,它的主要功能是将SWF文件转换为可执行的EXE文件。EXE文件是Windows操作系统下的程序文件格式,允许用户在没有安装Flash Player的情况下运行SWF内容。转换过程通常涉及到解编SWF文件中的...

    易语言SWF和EXE转换源码

    易语言是一种专为中国人设计的编程语言,它以简体中文作为编程语法,降低了...总的来说,这个源码包提供了学习易语言编程以及SWF与EXE转换技术的机会。如果你对这两个领域感兴趣,研究这个源码将会是一次有价值的实践。

    SWF转换成EXE文件

    3. SWF转换成EXE的场景与方法 - 转换需求:将SWF文件转换为EXE是为了使其能在没有Flash Player的环境中独立运行,或者为了保护内容不被轻易修改或盗用。 - 转换工具:有多种软件可以实现SWF到EXE的转换,例如...

    SWF2EXE转换器V2.0.4汉化版.rar

    SWF2EXE能够将SWF动画文件转换为不需要播放器的EXE可执行文件。对视全局设置向导,可以引导您完成SWF转EXE的设置.这些步骤包括:设置标题和输出文件夹. 输入应用程序名称和版本信息.选择应用程序和输出文件夹图标....

    易语言源码易语言SWF和EXE转换源码.rar

    《易语言源码:SWF与EXE转换的探索与实践》 易语言,作为一款中国本土化的编程语言,以其直观、简洁的语法设计深受初学者和专业开发者的喜爱。在给定的压缩包文件“易语言源码易语言SWF和EXE转换源码.rar”中,包含...

    【MFC/C++】swf2exe转换器,falsh2exe转换器

    一款flash(swf)文件的转换软件,目的是让用户可以将自己的swf文件转为独立的exe可执行程序,而不再需要在网页等容器中运行swf。将一个.swf文件打包成为一个独立的.exe文件后,双击打包后的.exe文件即可自动播放swf...

    将exe文件转换成swf文件转换工具

    3. **节省存储空间**:与exe文件相比,swf文件通常具有较小的体积,这有助于减少存储和传输的成本。 4. **安全性考虑**:由于exe文件可能携带病毒或恶意代码,将其转换为swf可以在一定程度上降低潜在的安全风险,...

    易语言SWF和EXE转换源码.7z

    在本压缩包“易语言SWF和EXE转换源码.7z”中,包含的是易语言编写的源代码,用于实现SWF(ShockWave Flash)文件与EXE(可执行文件)之间的转换。 SWF文件是Adobe Flash创建的动画或交互式内容,常用于网页上的小...

    SWF转EXE格式转换器汉化版.rar

    压缩包内附2款不同的SWF转EXE转换器,分别是SmartSWF和Flash Builder。推荐使用SmartSWF,使用方法很简单。打开SmartSWF后,点击主菜单,加载要转换的SWF文件,按热键Ctrl Alt E,选择保存EXE文件名及路径即可。...

    pdf2swf.exe

    3. **png2swf.exe**:与jpeg2swf类似,它将PNG图像转换为SWF,PNG格式支持透明度,因此这个工具适合处理需要透明背景的图像。 4. **gif2swf.exe**:将GIF动画或静态图像转换为SWF,使它们可以在网页上播放,且文件...

    flash.exe转swf工具

    "Flash.exe转swf工具"就是针对这种情况设计的,它允许用户将Flash的可执行文件(.exe)转换为原始的Flash影片格式(.swf)。 Flash.exe文件通常是基于Flash内容的独立可执行程序,它们可能包含ActionScript代码、...

    袖珍SWF、EXE文件转换器

    综上所述,《袖珍SWF、EXE文件转换器》是处理SWF与EXE之间转换需求的理想工具,其高效、便捷的特点使得它在众多转换工具中脱颖而出。通过理解并掌握这款软件的使用,用户能够更好地管理和分发他们的Flash内容,提高...

    pwf2swf-exe小工具.7z

    结合以上信息,我们可以理解这个工具包的用途是提供一套完整的解决方案,包括转换工具(pwf2swf.exe)、编程接口(如iTextSharp和Office Interop)以及可能的预览机制,以帮助开发者在C#环境中构建一个能够网页预览...

Global site tag (gtag.js) - Google Analytics