盟军敢死队2及3 GRL文件格式表
盟军敢死队2及3 GRL文件格式表
地狱门神(F.R.C.)制作
数据区 |
数据块 |
数据 |
数据类型 |
长度 |
描述 |
样例数据 |
Header DA |
Info DB |
Identifier |
String |
4 |
标志符 |
4746524C(GFRL) |
Version Sign |
String |
4 |
版本号 |
64000000(d)/65000000(e) |
||
Image Count |
Int32 |
4 |
图像数 |
08000000 |
||
Palette Count |
Int32 |
4 |
调色板数 |
03000000 |
||
Image Info Length |
Int32 |
4 |
单个图像信息头长度 |
40000000/4C000000 |
||
Palette Info Length |
Int32 |
4 |
单个调色板信息头长度 |
2C000000 |
||
Image Info DB |
Name |
String |
32 |
图像名称 |
|
|
Offset |
Int32 |
4 |
图像数据开头相对于第一个图像数据开头的偏移量 |
00000000 |
||
Length |
Int32 |
4 |
图像数据长度(注意:已发现长度为0的图像,估计是被删除的图像。) |
F0060000 |
||
Palette Index |
Int32 |
4 |
调色板索引 |
00000000 |
||
Compression |
Int32 |
4 |
压缩方法,有三种, (1) 2、4 (2) 0x142 (3) 0x102、0x302、0x802 |
02000000, 02010000 |
||
Width |
Int32 |
4 |
图像宽度 |
38000000 |
||
Height |
Int32 |
4 |
图像高度 |
2E000000 |
||
Center X |
Int32 |
4 |
中心点横坐标 |
1C000000 |
||
Center Y |
Int32 |
4 |
中心点纵坐标 |
17000000 |
||
Unknown1(Comm3) |
Int32 |
4 |
未知数据 |
00000000 |
||
Unknown2(Comm3) |
Int32 |
4 |
未知数据 |
00000000 |
||
Unknown3(Comm3) |
Int32 |
4 |
未知数据 |
00000000 |
||
Palette Info DB |
Name |
String |
32 |
调色板名称 |
|
|
Offset |
Int32 |
4 |
调色板数据开头相对于第一个图像数据开头的偏移量 |
9E2A0000 |
||
Length |
Int32 |
4 |
调色板数据长度 |
00030000 |
||
Count |
Int32 |
4 |
调色板颜色数 |
00010000 |
||
Data DA |
Image DB |
|||||
Length |
Int32 |
4 |
该图像的行数据总长度 |
09070000 |
||
Offset |
Int32 |
4 |
位图每一行在数据中相对于第一行开头的偏移量 |
00000000 |
||
Offset数量为Height |
||||||
Line Data |
Byte |
不定 |
每一行的RLE数据 |
|
||
Line Data数量为Height |
||||||
Image DB数量为Image Count |
||||||
Palette DB |
Red |
Byte |
4 |
红色通道 |
00 |
|
Green |
Byte |
4 |
绿色通道 |
00 |
||
Blue |
Byte |
4 |
蓝色通道 |
00 |
||
三元组数量为Count |
||||||
有很多个Data DB |
注意:
1、所有的整数数据类型都是little-endian的。
2、盟军2的GRL文件的RLE算法继承自盟军1的RLE文件的压缩算法,但是有所改变。
解压方法(1):
定义一个数称之为已解压次数,该数每次读入数量并处理后递增1。
当已解压次数 Mod 4为0时,读入的数量为透明像素数(可为0),输出这么多个透明像素即可。
当已解压次数 Mod 4为2时,读入的数量为不透明像素数(可为0),输出紧接着的这么多个不透明像素的索引即可。
当已解压次数 Mod 4为1或3时,读入的数量为半透明像素数(可为0),输出紧接着的这么多个半透明像素的索引即可。(通常应作为不透明像素输出。)
[例1] 15 01 27 09 4A FF FF 04 36 04 D4 D4 D4 00 14 表示(用-1表示透明)
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 27 4A FF FF 04 36 04 D4 D4 D4 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
解压方法(2):
透明模式和非透明模式交替。初始是透明模式。
读入一个数量,如果是透明模式,则输出这样数量的透明像素。
如果是非透明模式,则输出后面的这样数量的非透明元素。
[例2] 15 01 1C 02 01 57 04 01 3B 0A 02 4A 2C 12 表示
21个-1 1C -1 -1 57 -1 -1 -1 -1 3B 10个-1 4A 2C 18个-1
解压方法(3):
透明模式和非透明模式交替。初始是透明模式。
读入一个数量,如果是透明模式,则输出这样数量的透明像素。
如果是非透明模式,则输出后面的这样数量的非透明元素,要输出一个跳过一个。
[例3] 95 02 E1 01 E0 01 03 01 DC 01 01 01 80 01 A3 表示
149个-1 E1 E0 -1 -1 -1 DC -1 80 163个-1
3、行的排列顺序与一般BMP不同,是从上到下的。