BMP文件有个文件头啊typedef struct tagBITMAPFILEHEADER // bmfh { WORD bfType ; // signature word "BM" or 0x4D42 DWORD bfSize ; // entire size of file WORD bfReserved1 ; // must be zero WORD bfReserved2 ; // must be zero DWORD bfOffsetBits ; // offset in file of DIB pixel bits } BITMAPFILEHEADER, * PBITMAPFILEHEADER ; 在WINGDI.H内定义的结构可能与这不完全相同,但在功能上是相同的。第一个注释(就是文字「bmfh」)指出了给这种资料型态的资料变数命名时推荐的缩写。如果在我的程式内看到了名为pbmfh的变数,这可能是一个指向BITMAPFILEHEADER型态结构的指标或指向PBITMAPFILEHEADER型态变数的指标。结构的长度为14位元组,它以两个字母「BM」开头以指明是点阵图档案。这是一个WORD值0x4D42。紧跟在「BM」後的DWORD以位元组为单位指出了包括档案表头在内的档案大小。下两个WORD栏位设定为0。(在与DIB档案格式相似的滑鼠游标档案内,这两个栏位指出游标的「热点(hot spot)」)。结构还包含一个DWORD栏位,它指出了档案中图素位元开始位置的位元组偏移量。此数值来自DIB资讯表头中的资讯,为了使用的方便提供在这里。在OS/2样式的DIB内,BITMAPFILEHEADER结构後紧跟了BITMAPCOREHEADER结构,它提供了关於DIB图像的基本资讯。紧缩的DIB(Packed DIB)开始於BITMAPCOREHEADER:typedef struct tagBITMAPCOREHEADER // bmch { DWORD bcSize ; // size of the structure = 12 WORD bcWidth ; // width of image in pixels WORD bcHeight ; // height of image in pixels WORD bcPlanes ; // = 1 WORD bcBitCount ; // bits per pixel (1, 4, 8, or 24) } BITMAPCOREHEADER, * PBITMAPCOREHEADER ; 「core(核心)」用在这里看起来有点奇特,它是指这种格式是其他由它所衍生的点阵图格式的基础。BITMAPCOREHEADER结构中的bcSize栏位指出了资料结构的大小,在这种情况下是12位元组。bcWidth和bcHeight栏位包含了以图素为单位的点阵图大小。尽管这些栏位使用WORD意味著一个DIB可能为65,535图素高和宽,但是我们几乎不会用到那么大的单位。
{
WORD bfType ; // signature word "BM" or 0x4D42
DWORD bfSize ; // entire size of file
WORD bfReserved1 ; // must be zero
WORD bfReserved2 ; // must be zero
DWORD bfOffsetBits ; // offset in file of DIB pixel bits
}
BITMAPFILEHEADER, * PBITMAPFILEHEADER ;
在WINGDI.H内定义的结构可能与这不完全相同,但在功能上是相同的。第一个注释(就是文字「bmfh」)指出了给这种资料型态的资料变数命名时推荐的缩写。如果在我的程式内看到了名为pbmfh的变数,这可能是一个指向BITMAPFILEHEADER型态结构的指标或指向PBITMAPFILEHEADER型态变数的指标。结构的长度为14位元组,它以两个字母「BM」开头以指明是点阵图档案。这是一个WORD值0x4D42。紧跟在「BM」後的DWORD以位元组为单位指出了包括档案表头在内的档案大小。下两个WORD栏位设定为0。(在与DIB档案格式相似的滑鼠游标档案内,这两个栏位指出游标的「热点(hot spot)」)。结构还包含一个DWORD栏位,它指出了档案中图素位元开始位置的位元组偏移量。此数值来自DIB资讯表头中的资讯,为了使用的方便提供在这里。在OS/2样式的DIB内,BITMAPFILEHEADER结构後紧跟了BITMAPCOREHEADER结构,它提供了关於DIB图像的基本资讯。紧缩的DIB(Packed DIB)开始於BITMAPCOREHEADER:typedef struct tagBITMAPCOREHEADER // bmch
{
DWORD bcSize ; // size of the structure = 12
WORD bcWidth ; // width of image in pixels
WORD bcHeight ; // height of image in pixels
WORD bcPlanes ; // = 1
WORD bcBitCount ; // bits per pixel (1, 4, 8, or 24)
}
BITMAPCOREHEADER, * PBITMAPCOREHEADER ;
「core(核心)」用在这里看起来有点奇特,它是指这种格式是其他由它所衍生的点阵图格式的基础。BITMAPCOREHEADER结构中的bcSize栏位指出了资料结构的大小,在这种情况下是12位元组。bcWidth和bcHeight栏位包含了以图素为单位的点阵图大小。尽管这些栏位使用WORD意味著一个DIB可能为65,535图素高和宽,但是我们几乎不会用到那么大的单位。
BITMAP bi;
...bmp.GetBitmap(&bi);
// 查看 MSDN 里的 BITMAP 结构说明
((BITMAPINFOHEADER*)(pbData+sizeof(BITMAPFILEHEADER))).biWidth
biHeight等
就简便性而言
觉得 qc_jrj() 同学可以得8分
而我慧眼识英雄可以得12分哈
BITMAP bm;
GetObject(hBmp, sizeof(bm), &bm);