三星S308内屏图像分析--内屏图像压缩格式

【三星S308内屏图像分析--内屏图像压缩格式】三星S308内屏是16位65536色屏幕,跟T408/T508一样都是r5g6b5格式的BMP颜色范围,大部分图像还采用了压缩格式 。在把一幅图像导入到S308内屏时,需要把图像数据转换为r5g6b5格式再进行压缩 。关于图像的r5g6b5格式见http://www.blueshow.net/vbb/showthr...p;threadid=2036
,这里仅需注意r5g6b5格式是用两个字节表示一个像素 。以下讨论是针对r5g6b5图像数据而言 。
(一)压缩算法简介
S308内屏图像压缩采用了两种算法:LZW与RLE 。
1、LZW(Lempel-Ziv-Welch):LZW是一种基于字典算法的压缩方法,其主要思想为:用索引号表示一个单词 。在图像压缩中,可以把一个经常出现的像素表示为一个索引信息,该像素颜色进入调色板,这样按索引就可以查找到该像素的颜色 。一般地,索引总是比颜色所占空间要小,用索引替代颜色表示像素就实现了压缩 。
2、RLE(行程长度编码,也叫游长编码):游长编码利用了图像中的重复像素值,使用一个像素代表具有相同值的一连续像素串,用一整数代表这个串的长度 。在实际应用中,这种方法并非总能压缩数据 。对于那些具有足够多的连续像素串的图像而言,这种方法可以压缩,然而对那些在图像局部区域像素值经常发生变化的图像,这种方法反而会增加大小 。

(二)压缩图像数据编码
像素数据流从图像左上角至右下角按行进行 。一幅压缩的图像编码由三部分组成:头部、调色板、及像素数据组成 。以下叙述中各变量均为一个字节 。
1、头部:09 S,S为调色板大小,S<128,调色板最多容纳127种颜色 。
2、调色板:紧跟在头部之后,每两个字节表示一种颜色,为r5g6b5格式 。调色板占用空间小于256个字节 。调色板编号从0开始,索引为X的像素颜色是从调色板开始2X字节后的两个字节 。
3、像素数据:紧跟在调色板之后,基本方式是用像素数量 像素值表示像素串 。注意调色板不超过127色,这样调色板可能无法容纳一幅图像所包括的的全部颜色,所以像素值可能是像素颜色(2字节),也可能是像素索引(1字节) 。按照颜色是否在调色板中及像素是否连续相同,可以把像素分为四种串,对这四种像素串的标识则隐含在像素数量字节中 。具体编码规则如下:
设N表示像素数量,X为颜色索引,LH为像素两字节的颜色值 。则:
◆ N LH[1] LH[2] ... LH[N],0◆ N X[1] X[2] ... X[N-64],64◆ N LH,128◆ N X,192这里用索引表示像素对应的是LZW,相同连续像素串表示方法对应的是RLE 。
另外,图像在存储时必须保证从偶数地址开始,因此在头部前面根据情况可能需要添加一个字节的00 。

(三)压缩特点
从图像数据编码可以看出S308内屏图像压缩有以下特点:
1、无损性:LZW和RLE都是无损压缩,图像在压缩前和解压缩后完全一样,不会有一位的差错,完整地保持了16位图像的特点 。
2、逐行线性:RLE采用的是逐行线性压缩,压缩是针对水平线而言,图像在水平方向上连续相同像素串越长越多,压缩率就越大 。如果图像中没有足够多的这种像素串,这种方法反而会增大图像 。
3、LZW中,索引比颜色少占用一个字节的空间,用索引代替颜色表示像素能够减小图像 。S308限定了调色板大小不超过127,颜色超出调色板范围的像素,将直接用颜色值而不是索引表示 。这样如果图像的颜色数量比较少,LZW就能够有效地压缩图像 。

    推荐阅读