关于位图行程编码格式压缩 &行程长度压缩算法

本文详细介绍了Windows位图中的行程编码压缩技术,包括8位和4位位图的压缩方式,如编码方式和绝对方式,并解释了行程长度压缩算法(RLE)的工作原理及其在不同场景下的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于位图行程编码格式压缩

---Window中的位图支持行程编码压缩方式,通常位图的象素使用4比特或者8比特来表示,即BITMAPINFOHEADER结构中的biCompression的BI_RLE8和BI_RLE4

1.8位位图的压缩
---在这种情况下BITMAPINFOHEADER结构中的biCompression设置为BI_RLE8,.
使用256色位图行程编码格式将位图进行压缩。这种压缩方式包括绝对方式和编码方式。 

编码方式
---在此方式下每两个字节组成一个信息单元。第一个字节给出其后面相连的象素的个数。
第二个字节给出这些象素使用的颜色索引表中的索引。
例如:信息单元03 04,03表示其后的象素个数是3个,04表示这些象素使用的是颜色索引表中的第五项的值。
压缩数据展开后就是04 04 04 .同理04 05 可以展开为05 05 05 05. 信息单元的第一个字节也可以是00,
这种情况下信息单元并不表示数据单元,而是表示一些特殊的含义。
这些含义通常由信息单元的第二个字节的值来描述。这些值在0x00到0x02之间。

具体含义如下: 
第二个字节的值 
00 线结束 
01 位图结束 
02 象素位置增量。表示紧跟在这个字节后面的信息单元里的两个字节中所包含的
无符号值指定了下个象素相对于当前象素的水平和垂直偏移量。
例如:00 02 06 08表示的含义是下一个象素的位值是从当前位置向右移动5个象素,
向下移动8个象素。(不是字节) 

绝对方式 

---绝对方式的标志是第一个字节是0,第二个字节是0x03到0xff之间的值。
第二个 字节的值表示跟随其后面的象素的字节数目。每个字节都包含一个象素的颜色索引。
每个行程编码都必须补齐到字的边界。 

2. 4位位图压缩
---这是BITMAPINFOHEADER的biCompression设置为BI_RLE4,
使用16位行程编码格式进行位图压缩。压缩方式也包括编码方式和绝对方式。 

编码方式: 
---4位压缩的编码方式跟8位的编码的压缩方式没有什么区别。
每个信息单元也是由 两个字节表示,第一个字节表示其后面所跟随的象素的个数。
第二个字节表示象素在 颜色索引表中的索引。
这个字节又分为上下两个部分。第一个象素用上半部分指定的 颜色表中的颜色画出。
第二个象素用下半部分的颜色画出。第三个象素用下一个字节 的上半部分画出。
依次类推。 其余的跟8位位图压缩差不多。 

 

 

行程长度压缩算法 

 Run-Length Encoding(RLE)行程长度的原理是将一扫描行中的颜色值相同的相邻像素用一个计数值和那些像素的颜色值来代替。例如:aaabccccccddeee,则可用3a1b6c2d3e来代替。对于拥有大面积,相同颜色区域的图像,用RLE压缩方法非常有效。由RLE原理派生出许多具体行程压缩方法:

 
  1、PCX行程压缩方法:该算法实际上是位映射格式到压缩格式的转换算法,该算法对于连续出现1次的字节Ch,若Ch>0xc0则压缩时在该字节前加上0xc1,否则直接输出Ch,对于连续出现N 次的字节Ch,则压缩成0xc0 + N,Ch这两个字节,因而N最大只能为ff - c0=3fh(十进制为63),当N大于63时, 则需分多次压缩。


  2、BI_RLE8压缩方法:在WINDOWS的位图文件中采用了这种压缩方法。该压缩方法编码也是以两个字节为基本单位。其中第一个字节规定了用第二个字节指定的颜色重复次数。 如编码 0504表示从当前位置开始连续显示5个颜色值为04的像素。当第二个字节为零时第二个字节有特殊含义:0表示行末;1表示图末;2转义后面2个字节, 这两个字节分别表示下一像素相对于当前位置的水平位移和垂直位移。这种压缩方法所能压缩的图像像素位数最大为8位(256色)图像。


  3、BI_RLE压缩方法:该方法也用于WINDOWS位图文件中,它与 BI_RLE8编码类似,唯一不同是,BI_RLE4的一个字节包含了两个像素的颜色,因此,它只能压缩的颜色数不超过16的图像。因而这种压缩应用范围有限。 


  4、紧缩位压缩方法(Packbits):该方法是用于Apple公司的Macintosh机上的位图数据压缩 方法, TIFF 规范中使用了这种方法, 这种压缩方法与BI_RLE8压缩方法相似,如1c1c1c2132325648 压缩为:83 1c 21 81 32 56 48,显而易见, 这种压缩方法最好情况是每连续128个字节相同,这128个字节可压缩为一个数值7f。这种方法还是非常有效的。 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值