调色板,它的功能在于缓解位图文件存储空间(显存或系统内存)过大的问题。
彩色查找表。。。在帧缓存与显示器的数模转换器之间增加一个查色表,对显示的颜色进行索引
这样,在帧缓存单元的位数不增加的情况下,具有大范围内挑选颜色的能力。
彩色查找表是一个一维线形表,其每一项内容对应一种颜色。此时帧缓存中的每个单元存储的不再是颜色值,而是对应于某一像素颜色的地址。彩色表的长度由帧缓存每个存储单元的位数决定。这确定一幅画面能同时显示的颜色种类数。彩色表的元素位长由帧缓存每个存储单元的基色数决定。这决定显示器可选择显示的颜色种类数
颜色表中 的个数有 biBitCount 来确定 。 当 biBitCount=1,4,8 时,分别有 2,16,256 个颜色 ; 当 biBitCount=24 时,没有颜色表项。
在windows中每个颜色是 b g r a 四个字节保存,a代表透明度,如果是1位位图,那么颜色表一共站八个字节,
如果是4位位图,颜色表站64个字节,如果是8位位图,需要表示256中颜色,每种颜色站四个字节,所以颜色表一共站1024个字节。
256色的时候,windows中,位图数据的大小就是0-255,代表着调色板中的数据,每次读八个为就是一个像素信息,其他位图类似。
彩色查找表是一个一维线形表,其每一项内容对应一种颜色。此时帧缓存中的每个单元存储的不再是颜色值,而是对应于某一像素颜色的地址。
彩色表的长度由帧缓存每个存储单元的位数决定。
这确定一幅画面能同时显示的颜色种类数。彩色表的元素位长由帧缓存每个存储单元的基色数决定。这决定显示器可选择显示的颜色种类数
常见的位图有单色(实际是1位图,,2的一次方为2,,因此它是2色图,,黑白色)、16色(实际是4位图,,2的4次方16,,因此它能表示16种颜色)、
256色(实际是8位图,,这种位图的每个像素都用8位刚好一个字节来表示,2的8次方为256,因此它能表示256种颜色也即256种RGB的组合也即这种位图的色深)、
16位(2的16次方=65536)及24位(2的24次方=1677万种颜色和256级灰度值
色深差不了很多,所以效果其实与16位图不相差几多)真彩色5种,对于前三者(即不大于256色)都可以调色板方式进行存储,
而对16位及24位真彩色以调色板进行存储是不划算的,它们直接按照R,G,B分量进行存储。
1B(byte,字节)= 8 bit;
1KB(Kibibyte,千字节)=1024B= 2^10 B;
1MB(Mebibyte,)=1024KB= 2^20 B;
typedef struct tagRGBQUAD {
BYTE rgbBlue;
BYTE rgbGreen;
BYTE rgbRed;
BYTE rgbReserved;
} RGBQUAD;
COLORREF RGB(
BYTE byRed, // red component of color
BYTE byGreen, // green component of color
BYTE byBlue // blue component of color
);