调色板
1.概念的区分(转载自 此处)
- 单色图 每个像素只有一个bit 其值只能是 0或1
- 灰度图 图片每一个像素中红绿蓝的分量相等 。每个像素由 8bit 组成,即 0~255 种颜色。
- 伪彩色图 与灰度图类似,但是每一个像素中红绿蓝的分量不全相等。每个像素由 8bit 组成,即256种颜色。
真彩图片 每个像素点由 RGB 三个分量组成,每个分量各占 8bit ,每个像素 24bit.
2 .bmp 文件结构
由文件头 信息头 调色板 (可选 如使用索引来表示图像,调色板就是索引与其对应的颜色的映射表) 像素数据包组成。
- 由于位图信息头中的位图高度是正的,所以位图数据在文件中的排列顺序是从左下角到右上角,以行为主序排列的。也就是第一个数据(此处指前3个bytes)是图像最后一行第一列像素色彩数据,第二个数据是图像最后一行第二列像素色彩数据。
- 如果RGB 24位位图则使用3个bytes存储一个像素,按照BGR顺序存储。如果是32位ARGB数据则按照BGRA的顺序存储。
- 图像的大小为 sizeof(BITMAPFILEHEADER)+ sizeof(BITMAPINFOHEADER)+ (biWidth* biBitCount+31)/8*biHeight
Windows还规定图像文件中一个扫描行所占的字节数必须是4的倍数,不足部分要以0填充,所以数据区的大小不能使用简单的
(biWidth*biBitCount*biHeight)/8计算总字节数,而应当折算每行的BIT数,分子中的加31(因为4字节补齐就是32
位补齐)就是为了防止一个扫描行多一位或少一位而做的进位(+31)取整(/8)操作。
- 调色板
调色板其实是一张映射表,标识颜色索引号与其代表的颜色的对应关系。它在文件中的布局就像一个二维数组palette[N][4],其中N表示总的颜色索引数,每行的四个元素分别表示该索引对应的B、G、R和Alpha的值,每个分量占一个字节。如不设透明通道时,Alpha为0。因为前面知道,本图有256个颜色索引,因此N = 256。索引号就是所在行的行号,对应的颜色就是所在行的四个元素。