图像处理中为了节省表示图像RGB信息的空间用调色板存储彩色信息(RGB值),数据区只存储当前象素的色彩在调色板中的位置,这样就省了很多字节。不过真彩色的图像没有调色板。调色板是颜色的索引,只用于8位图像,16位以上就没有了。
随便的一幅256色BMP的图像
比如调色板区域的内容为:00 00 00 00 00 00 40 00 00 00 80 00 00 00 FF 00
00 20 00 00 00 20 40 00 00 20 80 00 00 20 FF 00
00 40 00 00 00 40 40 00 00 40 80 00 00 40 FF 00
............................................
FF FF 00 00 FF FF 40 00 FF FF 80 00 FF FF FF 00
四个一组共256组调色板数据。
数据区内容为 03 05 0A................................
意思就是第一个象素点的颜色在调色板中的位置是03,也就是R=FF,G=00,B=00;
第二个的R=40,G=20,B=00,以次类推。
调色板的每一组值的最后一位为保留值,同时RGB的顺序是B G R 保留值。
其实很简单,可以举个简单的例子,调试板是指一块区域,一个大的结构数组
数组中每个元素由 RGBQ 构成,R存放红色值,类推,Q是保留位,一般不用。
比如有一副真彩24位图象数据(无调色板) 一组RGB(就是一个象素)总共占3个字节
(R1G1B1) (R2G2B2)(R3G3B3) (R1G1B1) (R1G1B1)(R1G1B1)(R1G1B1)
7个象素 有5个颜色重复的象素的,总共21字节=3*7
转成8位(256色) 有调色板
就变成了
n0 n1 n2 n0 n0 n0 n0(n1...nX 是一个字节,只存放索引号,对应调色板数组的序号)
-----调色板------
0-----R1G1B1Q
1-----R2G2B2Q
2-----R3G3B3Q
加起来才19字节,这里19个字节=7+4*3
就是说,每一个索引号是一个字节,一共七个,而其中包括调色板中的3个,每一个是4个字节,因为有Q,所以就像下面所述,根据情况来决定。
重复的象素值越多,越省空间,这就是调色板的作用,但是如果重复的次数不多的话,你看到调色板里有很多Q,这样反而不省空间,不如用24位直接显示了
这里有个疑问,是否第二个举例中,应该是BGRQ,而不是RGBQ
还有个解释说,调色板不是颜色的索引, 只有具有调色板的图像数据才是索引,调色板是结构数组