RLE算法 - Azure Product

来源:百度文库 编辑:神马文学网 时间:2024/04/27 13:55:52
字体大小: 大 | 中 | 小 转自:http://www.gameres.com/bbs/showthread.asp?threadid=39493

找到两篇介绍RLE算法的文章,结合着看,理解了这个算法的目的是压缩重复的字节。大量应用在图形压缩上的原因,是因为图片中通常有很多相同颜色的区域(比如一片全黑的背景)。

RLE的基本思路是,把数据分两种情况对待:
A1.一些连续的重复字节
A2.一些连续的,不相重复的字节

RLE压缩最常见的一种算法思路:

将全部的数据分成很多块,这些块的长度各不一样:
all data = [block] + [block] + ... + [block]
每一块由两部分顺序组成:
a block = [header] + [data]
其中header部分占2字节16位,这16位中的最高位,标志了这个block的属性,是属于上面的A1还是A2。对应于A1和A2,剩下的15位以及后面的Data部分的意义又分为两种:
A1: block的剩下15位记录重复的次数,取值范围[0,32767];data段仅含一个字节,即重复的那个字节
A2: block的剩下15位记录data段有多少个字节;data段则是一系列不相重复的字节。

举例:(来自《汉化基础教程——压缩篇》)
文本字符串:A A A A A B C D E F F F。编码后得到:85 A 4 B C D E 83 F(85H= 10000101B、4H= 00000100B、83H= 10000011B)

参考:
《汉化基础教程——压缩篇》by 全球通 PGCG汉化组(该文还介绍了两外两种RLE算法,以及与GBA、汉化有关的其它压缩算法)
http://www.tgbus.com/htm/GBA/edu/cnedu/20041215215029-1.html
《Run Length Encoding compressor program, 16 bit header version》by Shaun Case
http://www.gamedev.net/reference/articles/article290.asp