windows位图结构
作者:互联网
位图文件应该具有.bmp
扩展名。
位图文件格式:BITMAPFILEHEADER
(位图文件头)结构,后接BITMAPINFOHEADER
、BITMAPV4HEADER
或 BITMAPV5HEADER
(位图信息头)结构,后接RGBQUAD
(颜色表)结构数组,后接Color-index
(颜色索引)数组——即实际的位图数据。
位图格式如下表所示:
BITMAPFILEHEADER |
---|
BITMAPINFOHEADER |
RGBQUAD array |
Color-index array |
1. BITMAPFILEHEADER
结构
C++:
typedef struct tagBITMAPFILEHEADER {
WORD bfType; //文件类型,必须是BM
DWORD bfSize; //位图文件大小,单位是字节
WORD bfReserved1; //保留字,必须是0
WORD bfReserved2; //保留字,必须是0
DWORD bfOffBits; //从BITMAPFILEHEADER结构第一个字节到实际位图数据的偏移量,单位是字节,
} BITMAPFILEHEADER, *PBITMAPFILEHEADER;
2. BITMAPINFOHEADER
、BITMAPV4HEADER
或 BITMAPV5HEADER
结构
- BITMAPINFOHEADER:用于DIB设备无关位图
- BITMAPV4HEADER:BITMAPINFOHEADER的扩展版本,可以向StretchDIBits函数传递JPEG或PNG图像。
- BITMAPV5HEADER:BITMAPINFOHEADER的扩展版本
C++:
typedef struct tagBITMAPINFOHEADER {
DWORD biSize; //结构体占有的字节数
LONG biWidth; //位图宽度,单位是像素(若是压缩格式,则表示解压缩之后的图片宽度)
LONG biHeight; //位图高度,单位是像素(正数表示位图结构是自底向上的, 负数表示
//位图结构是自顶向下的)
WORD biPlanes; //The number of planes for the target device,必须设置为1
WORD biBitCount; //The number of bits-per-pixel.该值决定了定义每个像素 需要的位数以
//及位图的颜色数,有0,1,4,8,16,24,32
DWORD biCompression; //拥有自底向上结构的位图的压缩类型(自顶向下不能被压缩)
DWORD biSizeImage; //图像大小,单位是字节
LONG biXPelsPerMeter; //目标设备(target device)的水平分辨率,单位是像素每米
LONG biYPelsPerMeter; //垂直分辨率,单位同上
DWORD biClrUsed; //The number of color indexes in the color table that are actually used by
//the bitmap.
DWORD biClrImportant; //显示位图所必须的颜色索引数
} BITMAPINFOHEADER, *PBITMAPINFOHEADER;
3. RGBQUAD
结构
表示在设备调色板中每一种颜色的RGB强度值
C++:
typedef struct tagRGBQUAD {
BYTE rgbBlue; //颜色中的蓝色分量
BYTE rgbGreen; //颜色中的绿色分量
BYTE rgbRed; //颜色中的红色分量
BYTE rgbReserved; //保留字节,必须为0
} RGBQUAD;
4. Color-index
数组
该数组为位图中的每一个像素,存储一个对RGBQUAD
结构的索引,以此来表现颜色。因此,颜色索引数组具有的总位数(即占有的存储空间),等于位图的像素数乘以RGBQUAD
结构的索引数。比如,一个88的黑白位图,其颜色数组共881=64位,因为1位即可索引黑白两种颜色。再比如,16色的3232位图Redbrick.bmp
,其颜色数组共32324=4096位,因为4位可以索引16种颜色(2^4=16)。
如果位图结构是自顶向下的(a top-down bitmap
),颜色索引数组,即实际的位图数据,从位图的第一行开始编码。根据颜色索引数组的前n位表示的数字d,就可取得第一行最左面像素的颜色——在RGBQUAD结构中编号为d的颜色(n就是可以表示RGBQUAD结构中所有索引的二进制位数)。在索引到这一行最右面的元素时,从下一行最左面的元素继续进行索引,直到位图结束。如果是自底向上(a bottom-up bitmap
)的位图,从位图的最下面一行开始,仍然从左到右,依次往上。
注:本文参考MSDN——Bitmap Storage。
标签:BITMAPINFOHEADER,颜色,windows,RGBQUAD,索引,DWORD,位图,结构 来源: https://blog.csdn.net/u014261408/article/details/90109964