本文翻译自Adobe官方公布的SWF File Format Specification Version 10
这里附上英文版下载地址:
http://bbs.9ria.com/forum.php?mod=viewthread&tid=17207&highlight=swf%2Bfile*

本文纯属个人之作,如果文中发现错误请留言提出。

第一章基本讲得都是数据定义,后面讲解时,我们用到再解释说明,因此我们直接从第二章SWF结构概要开始翻译。

第二章 SWF结构概述

这一章节主要对构成SWF的基础元素进行讲解。

SWF文件头

所有的SWF文件都包括这样一个文件头,我们贴一个图,来说明这个头的结构

文件头以一个3字节字符串0x46、0x57、0x53("FWS")或者0x43,0x57,0x53("CWS")的标签开始。标签FWS标明这是一个未压缩SWF,标签CWS标明这是一个在头文件8字节之后使用zlib标准压缩的SWF,ZLIB库所使用的数据格式遵循RFCs文档1950-1952。压缩过的SWF只有在6版本或之后的版本才支持。
在标签之后跟随的一个字节的数字表示版本号,这个数字不是一个ASCII 字符,是一个8位二进制数。例如SWF 4,这个版本字节是0x04, 而不是这个ASCII字符串“4”(0x34)。
文件长度字段(FileLength)指的是这个SWF文件的字节总长度,包括文件头计算在内。如果一个SWF是未压缩的文件("FWS标签"),那么这个文件长度就刚好等于整个文件的大小。如果这是一个压缩过的SWF(“CWS”标签),文件长度就是解压后的总长度,因此和文件的大小并不相等。在知道解压缩后文件大小的情况下,解压过程会更高效。
帧尺寸(FrameSize) 定义了屏幕展示区域的宽和高。这个字段是通过一个RECT数据类型来存储的,它所占的字节长度取决于实际所需要的位数。这个帧尺寸RECT数据中Xmin,Ymin的值总是0,Xmax和Ymax 定义宽高。
帧率(FrameRate)定义一秒钟播放的帧数,但是这个帧率不是保证准确的,例如在CPU繁忙或速度慢的时候,就不准确。
总帧数(FrameCount)指的是这个SWF文件的总帧数

UI8是指一个8位二进制(一个字节)代表的无符号整数
UI16是指一个16位二进制(二个字节)代表的无符号整数
同理UI32。
RECT是一串变长二进制数据结构,表示了5个数值,分别是定义位数
Nbits[5],xmin,xmax,ymin,ymax。一般可以表示两个数的范围。这里就是用来表示舞台的长和宽,前面5位二进制用来表示后面每一个数值的位数

用到的数据结构就都解释完了。我们拿一个例子来说明头的构造。我截图了一个SWF文件的二进制来进行解析:

我们对着官方的文件来进行分析下看看
前面三个字节,43 57 53 就是三个字符CWS,代表这是一个经过zlib压缩过的SWF,当然目前还有FWS未压缩,ZWS代表lzma压缩,三种格式。
第四个字节,官方说的是版本号,我们这里是0a,就是flash10了。
接下来是一个无符号32位整数,代表整个文件长度。因此这里就是用4个字节:10 bf 0a 00来显示文件长度了,但是由于这里字节采用了低位在前的编码规则,所以实际值应该是00 0a bf 10=704272,但是你会发现这和实际大小文件不匹配,为什么呢,因为这里的值是将压缩部分()解压缩之后,再加上文件头上这几部分计算出来的。
因此我们需要解压第8个字节之后的所有数据,解压后如下:

接下来就是一个RECT数据类型,我们需要替换成二进制编码如下
78就是0111 1000
前面5位表示的是位数,因此这里就是01111=15因为后面4个数就是每个占15位。因此这个RECT数据总位数就是5+(15*4) = 65位,由于一个字节是8位,因此这个数据总共占用字节数为65/8=8.125想上取整就是9个字节。因此这个RECT数据的字节就是:
78 00 05 5f 00 00 0f a0 00
转成二进制:
0111 1000 0000 0000 0000 0101 0101 1111 0000 0000 0000 0000 0000 1111 1010 0000 0000 0000
xmin = 000 0000 0000 0000 = 0;
xmax = 0101 0101 1111 000 = 11000(twips) = 550(pixels)
ymin = 0 0000 0000 0000 00 = 0
ymax = 00 1111 1010 0000 0 = 8000(twips) = 400(pixels);

*说明:SWF文件格式中所有的x-y 坐标信息都被存为整数,计量单位称作缇(twips)。在SWF
中,1缇是1/20个逻辑像素。*

因此这计算出来就是该SWF舞台宽度为550像素,高度为400像素。

接下用一个UI16,代表帧率00 19,低位在前,所以应该是19 00。同时这个帧率是一个8.8形式的定点小数因此帧率就是19.00换算成十进制就是25.00。

接下来就是帧总数,也是一个UI16:01 00,同样低位在前因此实际是00 01 = 1(帧)。

这样一个SWF文件的头就解析完了。

头这部分翻译也就结束了。

swf文件格式1(中文翻译版)相关推荐

  1. GeoPandas官方快速入门文档(中文翻译版)

    GeoPandas官方快速入门文档(中文翻译版) 原文链接>>Introduction to GeoPandas 点这里可以一键跑通>>GeoPandas 简介 GeoPand ...

  2. 7系列FPGA数据手册:概述------中文翻译版

    7系列FPGA数据手册:概述------中文翻译版 总体介绍 7系列FPGA功能摘要 Spartan-7系列FPGA功能摘要 Artix-7系列FPGA功能摘要 Kintex-7系列FPGA功能摘要 ...

  3. DirectX 11 Tutorial 4 中文翻译版教程: 缓存区、着色器和HLSL

    原英文版地址:http://www.rastertek.com/dx11tut04.html 本教程将介绍如何在Directx11中编写顶点和像素遮影器.它还将介绍如何在Directx11中使用顶点和 ...

  4. DirectX 11 Tutorial 2 中文翻译版教程:创建框架和窗口

    原英文版地址:http://www.rastertek.com/dx11tut02.html 在开始使用Directx11编码之前,我建议构建一个简单的代码框架.这个框架将处理基本的Windows功能 ...

  5. DirectX 11 Tutorial 3 中文翻译版教程: 初始化DirectX 11

    原英文版地址:http://www.rastertek.com/dx11tut03.html 本教程将首次介绍如何使用Directx11.我们将讨论如何初始化和关闭Direct3D以及如何渲染到窗口. ...

  6. DirectX 11 Tutorial 6 中文翻译版教程: 漫射照明

    原英文版地址:http://www.rastertek.com/dx11tut06.html 在本教程中,我将介绍如何使用漫反射照明和Directx11来照亮三维对象.我们将从前面的教程中的代码开始并 ...

  7. ElasticSearch最新权威指南中文翻译版!

    ElasticSearch最新权威指南中文翻译版! GitHub源码地址:  https://github.com/wjw465150/Elasticsearch 阅读的GitPage地址:  htt ...

  8. 苹果商店应用审核指南(2014年中文翻译版)

    前言 非常高兴您能付出宝贵的时间和精力来开发iOS应用.成千上万的开发者的经历表明,无论从专业技术还是经济收入上,开发iOS应用都是个有意义的事情,我们将帮助你更快成功,成为其中的一员.这篇App S ...

  9. pinia中文文档 指导文档中文翻译版 pinia指导中文翻译

    Pinia 指导文档 中 文 翻 译 版 翻译者:jcLee95 Pinia 指导手册中文翻译地址(本文): https://blog.csdn.net/qq_28550263/article/det ...

最新文章

  1. 既使用maven编译,又使用lib下的Jar包
  2. SAP有用的知识(持续更新)
  3. [BZOJ1103][POI2007]大都市meg
  4. Deepin下tftp客户端传送升级文件失败问题分析
  5. 《极乐迪斯科》:醉鬼神探的深邃人生
  6. mysql 日志记录 archive_完美起航-Mysql日志管理、备份与恢复
  7. go tour - Go 入门实验教程
  8. 显示隐藏、淡入淡出、上卷下展的区别
  9. 总线通信协议-PCIe
  10. matlab一维haar信号塔式分解,matlab小波分解与重构
  11. WPA无线密码破解利器EWSA/跑包软件
  12. 计算机更改后怎么找不到桌面文件,电脑桌面的文件不见了怎么找回
  13. 文本分类 之 基于BertForSequenceClassification模型的金融知道 最佳答案推荐
  14. RK VOP设备树分析
  15. python量化金融下单接口特点
  16. C语言/C++常见习题问答集锦(四十三) 之持之以恒
  17. 一篇文章纵览阿里云移动云Apsara Mobile产品系
  18. 计算机控制课设直流电机控制,计算机控制系统课程设计 直流电机测速调速系统 (精选可编辑)...
  19. 记一次bro+pf_ring zc的搭建历程
  20. 【影像组学】CT数据与MRI数据

热门文章

  1. ORA-22858 invalid alteration of datatype
  2. K-均值聚类算法的原理与实现
  3. KNN算法实例(酒的分类)【机器学习算法一KNN4】
  4. dubbo学习之源码
  5. java自定义表单系统_自定义表单二次开发
  6. 工具类App到底有没有前途?
  7. css 平移到某个位置_CSS3平移动画效果
  8. 搜狗浏览器收藏夹目录设置
  9. 行为识别 - X3D: Expanding Architectures for Efficient Video Recognition
  10. PDM系统在饲料工程设计中的应用