转自:http://www./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./reference/articles/article290.asp |
|