现在我的程序中有一个BYTE数组,我希望将这些byte数据保存到一个256色位图(比如一个20 * 30)中,该怎么实现?因为通常对于一个256色的DIB位图来说,该位图文件包含一个BITMAPFILERHEADER, BITMAPINFO,然后才是byte数据,但现在我只有byte数据,我能通过这些byte数据创建一个位图吗?BITMAPINFO中的color table怎么定义啊?
BITMAPFILERHEADER中的数据又怎么填充????
BITMAPFILERHEADER中的数据又怎么填充????
HDC hdc, // 没有的话 ::GetDC(NULL);
CONST BITMAPINFOHEADER *lpbmih, // bitmap data
DWORD fdwInit, // CBM_INIT
CONST VOID *lpbInit, // initialization data
CONST BITMAPINFO *lpbmi, // byte数据
UINT fuUsage // color-data usage
);
BITMAPINFO可以用BITMAPINFOHEADER强制转换
typedef struct tagBITMAPINFOHEADER{
DWORD biSize; //sizeof(BITMAPINFOHEADER)
LONG biWidth; //20
LONG biHeight; //30
WORD biPlanes; //1
WORD biBitCount //256
DWORD biCompression;//BI_RGB
DWORD biSizeImage; //byte数据大小
LONG biXPelsPerMeter; //0
LONG biYPelsPerMeter; //0
DWORD biClrUsed; //256
DWORD biClrImportant; //0
} BITMAPINFOHEADER, *PBITMAPINFOHEADER;
注意:我写的是结构,你要把他写成变量啊~~~
typedef struct tagBITMAPINFO {
BITMAPINFOHEADER bmiHeader;
RGBQUAD bmiColors[1];
} BITMAPINFO, FAR *LPBITMAPINFO, *PBITMAPINFO;很显然,我们的位图bmiColors的数量远远不止1个,但是该结构只定义一个,其他颜色表的数据存放在什么地方啊???或者它应该定义成一个指针啊,比如:
typedef struct tagBITMAPINFO {
BITMAPINFOHEADER bmiHeader;
RGBQUAD* lpbmiColors;
int clrCount; // lpbmiColors中的颜色表个数
} BITMAPINFO, FAR *LPBITMAPINFO, *PBITMAPINFO;大家对这个“奇怪”的结构怎么理解?