原文
7 P4 j5 R# \2 f5 L7 t1 Mhttp://blog.csdn.net/vbvan/archive/2008/02/25/2118668.aspx0 C6 D' u# S N
) a# d+ Y4 b4 Y5 ?4 ~/ v& `
deflate
5 _& [; u9 {) _8 ?5 b5 Z. b) Xhttp://www.zlib.net/
( \' K ?' u- S0 |这是ZIP默认采用的压缩算法。ZIP格式使用非常广泛,不仅有开源的C实现-zlib,还有众多的商业解决方案。因此在游戏中采用deflate,可以大大降低编程的成本。很多国外游戏的档案都采用这种压缩算法,或者直接使用ZIP文件格式存储资源。目前不少国内厂商也开始采用deflate。2 E; ]% b/ B$ A' ^
默认ZIP使用的deflate,传入的WindowBits是-0xF。而zlib中默认使用的WindowBits是0xF。
0 n0 J( m L' v- G采用0xF作为WindowBits时,压缩后的数据的第一个字节往往是0x78,这可以用于识别deflate算法。
- `( X* d8 B* D. c% g% z另外deflate算法通常都使用了zlib中的实现,在exe中会保留有版权信息:“ deflate 1.2.3 Copyright 1995-2005 Jean-loup Gailly ”,或者会带有zlib.dll。
T% N8 F9 L4 Q. }3 p( J
% g) u- B' `5 _; t( \& bbzip2
- t* L3 }& Y% S+ l* M4 i* e. zhttp://www.bzip.org/
! l- {# @8 t% u在游戏中很少见,不过确实有游戏公司采用。
Y4 M3 Q8 i. H/ a) S它压缩之后的数据是以BZ开头的。0 k; Z1 ?' O+ K' m
6 X, m; }- b% |
lzo
0 g2 G* s9 X T: l5 @# ehttp://www.oberhumer.com/opensource/lzo/3 z% {* @- I% A
lzo是一种解压非常快速的压缩算法,通常开头若干字节不会被压缩。国内有几家公司使用了这种算法。0 r& L# _6 u5 q) W
lzo的版权信息是:
0 n* F. p9 I& o! F% N“LZO data compression library.
$ r) E4 |7 k. i. }0 K6 C0 ~# v1 o$Copyright: LZO (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Markus Franz Xaver Johannes Oberhumer/ g5 a: ~1 t. M$ E" F
<[email protected]>
( g) v) C2 a phttp://www.oberhumer.com $”
7 p2 |) Q. D9 s' i, q2 ?7 u- N. K
! f" F' j( z+ o6 n. O& h7 grle) n9 U/ W' M8 w5 a$ m4 Z) f
http://www.datacompression.info/RLE.shtml
0 f. O: ^' F# V7 U$ k9 yRLE是一个非常简单的算法,变种非常多。通常用于图像数据的压缩。$ M- a" W, d q
较早的游戏一般用RLE算法压缩透明色。
/ N$ }% f( K8 s标准的rle算法通常用字节的高2位做标记,因此比较容易识别。: w- q) f* f4 e7 f1 y
9 |4 d+ f! g3 ^2 _# S. b- e) g1 zlzss
7 ^3 `9 r* [. F3 U6 thttp://www.datacompression.info/LZSS.shtml
* p* H0 e- {0 n日本人Haruhiko Okumura发明的压缩格式。
; M+ p8 k$ o# Y* V( w这个算法有非常多的变种,在较早的游戏中比较常见。
m) i9 w0 N- j仙剑1就采用了这种压缩算法的变种,它对压缩之后的数据做了huffman编码。) Z* C9 r/ W" E( f8 L
标准的LZSS算法采用单独的字节存储标记,所以通常数据的开头若干字节也是不会被压缩的。& H5 A& l4 \& y8 [+ z
! c: B( B7 M* E3 @& Y5 l
lzhuf
6 S+ G5 X( q) p日本人Haruyasu Yoshizaki发明的压缩格式,使用了huffman编码。
% X7 R4 \; H, l: r6 Y相比lzss更复杂一些,在早期的游戏中也比较常见。
* T7 G$ X" s; C4 i# i
% p% p. o0 M8 M8 n最后贴一篇压缩算法的历史回顾) {( W2 W1 S% A; i
http://oku.edu.mie-u.ac.jp/~okumura/compression/history.html |