[cpp] view plain copy print?
typedef struct tagBITMAPINFOHEADER{
DWORD biSize
LONG biWidth
LONG biHeight
WORD biPlanes
WORD biBitCount
DWORD biCompression
DWORD biSizeImage
LONG biXPelsPerMeter
LONG biYPelsPerMeter
DWORD biClrUsed
DWORD biClrImportant
} BITMAPINFOHEADER
这个结构的长度是固定的,为40个字节(LONG为32位整数),各个域的说明如下:
1、biSize 指定这个结构的长度,为40。
2、biWidth 指定图象的宽度,单位是象素。
3、biHeight 指定图象的高度,单位是象素。
4、 biPlanes 必须是1,不用考虑。
5、biBitCount 指定表示颜色时要用到的位数,常用的值为1(黑白二色图), 4(16色图), 8(256色), 24(真彩色图)(新的.bmp格式支持32位色,这里就不做讨论了)。
6、biCompression 指定位图是否压缩,有效的值为BI_RGB,BI_RLE8,BI_RLE4,BI_BITFIELDS(都是一些Windows定义好的常量)。要说明的是,Windows位图可以采用RLE4,和RLE8的压缩格式,但用的不多。我们今后所讨论的只有第一种不压缩的情况,即biCompression为BI_RGB的情况。
BITMAPINFOHEADER 是结构(bitmap信息头):typedefstructtagBITMAPINFOHEADER {
DWORD biSize
LONG biWidth
LONG biHeight
WORD biPlanes
WORD biBitCount
DWORD biCompression
DWORD biSizeImage
LONG biXPelsPerMeter
LONG biYPelsPerMeter
DWORD biClrUsed
DWORD biClrImportant
} BITMAPINFOHEADER, *PBITMAPINFOHEADER
sizeof(BITMAPINFOHEADER) -- 计算出这个结构占内存大小,单位字节。
(DWORD) 是强制转换为 (unsigned long int) 数值,DWORD就是unsigned long int
-------
(LPSTR) 就是 (char *)因为 有定义 typedef char* LPSTR 小括号括起来就是强制转换。
------
RGBQUAD 是 结构 (RGBA 4字节结构):
typedef struct tagRGBQUAD {
BYTE rgbBlue
BYTE rgbGreen
BYTE rgbRed
BYTE rgbReserved
} RGBQUAD
LPRGBQUAD 是指针,指向 RGBQUAD 型结构的指针。
--
lpRGB是指针, 指向计算出来的RGB数据开始位置。
先判断一下 sizeof(infoHeader) 是不是40个字节。如:
int i = sizeof(infoHeader) 跟踪一下,看i是不是40个字节。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)