2.5 位图存储
存储位图的最简单方法是简单地逐字节地列出位图信息。此方法存储的文件通常称为RAW文件。考虑到位图尺寸(N x M)和位深(B)中的颜色深度,任何位图所需的磁盘存储量都很容易计算。文件大小的公式以KB为单位
其中N和M是水平和垂直像素的数量,B是每个像素的位数。下表显示了几种位图类型的文件大小(如果它们以RAW格式存储)。
从该表中可以看出,大型24位图像将导致非常大的文件,这就是压缩变得重要的原因。有大量的文件格式用于存储从简单到非常复杂的压缩位图。存在复杂的格式是因为如果不使用压缩将存在非常大的位图文件。压缩文件格式有两大类,一类是无损的(完全保留位图),另一类是有损的。以下显示了压缩技术的主要层次结构。
减小位图文件大小的最简单方法是减少颜色信息,这称为比特缩减或量化。例如,可以使用抖动将24位位图转换为8位索引位图,以模拟丢失的颜色。到目前为止最常见的有损格式是JPEG,它的工作原理描述远远超出了本讨论的范围。它的主要优点是它可以提供比无损格式更好的压缩比。例如,考虑以下位图,其原始图像是24位颜色的500 x 350像素。使用前面给出的公式,未压缩文件大小为500 x 350 x 24/8/1024 = 513K
保存为灰度(位深度减少)文件为171K(小3倍),使用RLE保存和压缩 它是388K(原始的75%),使用LZW压缩保存它是188K(原始的36%),保存作为JPEG,它是30K(压缩比为17:1)。
以下是对称为行程编码(RLE )的最简单的无损压缩技术的描述,该技术对仅使用少量颜色的位图具有良好的效果。考虑以下小的17 x 10像素,8位图像。
如果要以RAW格式存储,则所有10行每行需要16个字节。但是前两行都是相同的级别,因此在运行中简单地保存相同颜色的数量以及运行颜色会更有效。前两行而不是需要16个字节,每个只需要2个字节。
在原始格式中,前三行是
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 1 1 1 1 1 1 1 1 1 1 1 1 0 0
使用行长编码,前三行将是
16 0
16 0
2 0 12 1 2 0
虽然RLE的实际实现中涉及的细节 多于此处描述的,但这是运行长度编码背后的基本原理。为了使RLE达到某种程度的压缩,需要运行相同的颜色,因此对于高度彩色的图像(例如24位照片)不太可能有用。