冒险解谜游戏中文网 ChinaAVG
标题:
游戏常用压缩算法的介绍和识别
[打印本页]
作者:
shane007
时间:
2009-12-22 17:16
标题:
游戏常用压缩算法的介绍和识别
原文
% f$ P9 P' {: e" Y
http://blog.csdn.net/vbvan/archive/2008/02/25/2118668.aspx
" d1 O" g5 y d) N& E3 T5 d
2 T0 ^9 p; u8 Q( j# G
deflate
3 p$ W6 `. J! ^ |
http://www.zlib.net/
9 F- R: n& D) e; a9 g B# H
这是ZIP默认采用的压缩算法。ZIP格式使用非常广泛,不仅有开源的C实现-zlib,还有众多的商业解决方案。因此在游戏中采用deflate,可以大大降低编程的成本。很多国外游戏的档案都采用这种压缩算法,或者直接使用ZIP文件格式存储资源。目前不少国内厂商也开始采用deflate。
2 Q0 G# r9 p) c7 F' S
默认ZIP使用的deflate,传入的WindowBits是-0xF。而zlib中默认使用的WindowBits是0xF。
9 M# H/ W. `* v( N7 |, ]
采用0xF作为WindowBits时,压缩后的数据的第一个字节往往是0x78,这可以用于识别deflate算法。
% @. j* w Z6 `; s8 C
另外deflate算法通常都使用了zlib中的实现,在exe中会保留有版权信息:“ deflate 1.2.3 Copyright 1995-2005 Jean-loup Gailly ”,或者会带有zlib.dll。
$ o' n7 x$ s9 s6 }, L$ @9 \7 }
, ^* }% ]) G8 q& x B$ x$ t9 E
bzip2
( ?% p- x8 }( }
http://www.bzip.org/
8 {8 ~# I7 ^7 w$ H: a& H! e9 m9 f5 m; l) a
在游戏中很少见,不过确实有游戏公司采用。
. i+ Z9 x8 K) w4 y
它压缩之后的数据是以BZ开头的。
8 s) @: J- p" y4 P, I1 Y
7 S9 `( O! d# t. c3 Q% [
lzo
[6 C! r% E6 o; F
http://www.oberhumer.com/opensource/lzo/
' m% k5 _- M2 o X7 J
lzo是一种解压非常快速的压缩算法,通常开头若干字节不会被压缩。国内有几家公司使用了这种算法。
, I" y) ]4 g6 T' G, ~. t: g1 s! W
lzo的版权信息是:
4 c5 X9 c5 w" x5 G5 f
“LZO data compression library.
( T3 `0 o K) y! }: `
$Copyright: LZO (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Markus Franz Xaver Johannes Oberhumer
6 A! C9 ?4 H, k7 L
<
[email protected]
>
0 g% d7 k3 U) L) B
http://www.oberhumer.com
$”
5 {6 e; l2 w% k+ c9 f
7 s7 p0 l" \& T9 e
rle
' b9 o- Y( q& I9 O- G4 F0 v+ l- l, F
http://www.datacompression.info/RLE.shtml
1 U2 b& d3 M( z1 J
RLE是一个非常简单的算法,变种非常多。通常用于图像数据的压缩。
: ~* V+ S) i, |8 Q& b
较早的游戏一般用RLE算法压缩透明色。
3 V8 k3 H+ O4 r, D
标准的rle算法通常用字节的高2位做标记,因此比较容易识别。
& y6 r* ^' P! [8 F- T3 J; X4 N! R
4 `( ?; N* z! w1 P, l
lzss
7 v6 w$ p$ Y6 _% q2 c8 Q
http://www.datacompression.info/LZSS.shtml
, ^& N" _/ e$ U2 |
日本人Haruhiko Okumura发明的压缩格式。
( E E) P9 [; a$ n) S1 p N
这个算法有非常多的变种,在较早的游戏中比较常见。
, i* ^) B) e7 E# D
仙剑1就采用了这种压缩算法的变种,它对压缩之后的数据做了huffman编码。
' f# u j) @# T4 v
标准的LZSS算法采用单独的字节存储标记,所以通常数据的开头若干字节也是不会被压缩的。
7 c+ R n, l$ X7 m
9 d0 p9 }: q) q/ h5 b
lzhuf
4 f! H( j# o" X7 V3 x4 c0 E1 ^" l
日本人Haruyasu Yoshizaki发明的压缩格式,使用了huffman编码。
' g! ^6 O% L' ~) U; T+ C
相比lzss更复杂一些,在早期的游戏中也比较常见。
4 X& y8 W4 z/ m' v& }/ ~
* |* ?& M% W+ k! N% U
最后贴一篇压缩算法的历史回顾
- z1 E( `* f/ m6 N" C3 D9 c
http://oku.edu.mie-u.ac.jp/~okumura/compression/history.html
作者:
灰色小狼
时间:
2009-12-22 19:16
我是进来膜拜霍夫曼大神的 [s:39]
6 j5 {/ e) l; `1 p
& a5 z9 h) k2 ~2 v
Huffman编码
/ S w. t: w# r w' `/ x( B
Huffman编码是第一个真正实用的编码方法,由D.A.Huffman在1952年提出。当时Huffman是麻省理工学院的一名学生,据说为了向老 师证明自己可以不参加某门功课的期末考试,他设计了这个看似简单却影响深远的编码方法。Huffman编码效率高,运算速度快,实现方式灵活,从20世纪 60年代直到现在,在数据压缩领域得到了广泛的应用。而20世纪80年代初,Huffman编码又出现在CP/M和DOS系统中,即使在今天,在许多知名 的压缩工具和压缩算法里(如WinZip、gzip和JPEG),也都有Huffman编码的身影。不过,Huffman编码所得的编码长度只是对信息熵 计算结果的一种近似,并不能真正逼近信息熵的极限。Huffman编码影响力很深远,至今还在计算机大专学生必修课程《数据结构》中被提及。
欢迎光临 冒险解谜游戏中文网 ChinaAVG (https://chinaavg.com/)
Powered by Discuz! X3.2