8位(bit)位图

彩色版中有2^8=256种颜色,具体哪256种颜色可由调色板灵活规定,因此每个像素点最多有256种情况(颜色),故刚好可用两位十六进制码(16^2=256)表示,占1字节。

一幅512×512的8位位图大小计算方法:位图文件头(14字节)+ 位图信息头(40字节)+ 调色板(256×彩色表4字节)+ 实际像素点占内存(512×512×1字节)= 263222字节(Byte)。

24位位图

又名RGB真彩色图,含2^24=16777216=16M色,没有彩色表,原因上文已说明。

每个像素点由3个字节(十六进制码6位)表示,每个字节负责控制一种颜色,分别为蓝(Blue)、绿(Green)、红(Red)。为什么每种颜色用1个字节控制呢?我们知道,图像中任何颜色都是由蓝、绿、红混合而成,而在24位位图中这三种颜色的跨度(深度)分别为256=2^8,占二进制8bit=1字节,故蓝、绿、红刚好可用1个字节表示。那么每个像素点可能的颜色就有256×256×256=2^24种。

一幅256×256的24位位图大小计算方法:位图文件头(14字节)+ 位图信息头(40字节)+ 实际像素点占内存(256×256×3字节)=196662字节(Byte)。

需要注意的是,Windows有“补零”的习惯!即要求位图的每一行像素所占字节数必须被4整除。若不能倍4整除,则在该位图每一行的十六进制码末尾“补”1至3个字节的“00”。例如:一幅宽253×高256的24位位图,微软在生成该图为实际文件时,计算每一行像素所占字节=宽253×3字节=759字节,检验其被4除余1,则在每行的十六进制码末尾加1个字节,补“00”,变为760字节。

因此我们计算该图大小时应先判断是否“补零”,再得出算法:该图大小 = 位图文件头(14字节)+ 位图信息头(40字节)+ 实际像素点占内存(高256×每行760字节)= 194614字节(Byte)。

有趣的是,“补零”只针对位图的宽进行检验,一幅宽256×高253的24位位图,其大小 = 位图文件头(14字节)+ 位图信息头(40字节)+ 实际像素点占内存(高253×每行768字节)= 194358字节(Byte)< 196662字节(Byte)。这样,只是把此图像的宽和高颠倒,图像所占内存竟然变小了。