BITMAPINFO是API中的一个结构:
typedef struct tagBITMAPINFO {
BITMAPINFOHEADER bmiHeader;
RGBQUAD bmiColors[1];
} BITMAPINFO, *PBITMAPINFO;
本身第二个参数就很难理解,如果让咱们定义这样的结构,一般是:
typedef struct tagBITMAPINFO {
BITMAPINFOHEADER bmiHeader;
RGBQUAD* bmiColors;
} BITMAPINFO, *PBITMAPINFO;
这样好初始化,好理解,好赋值...
对于API的这个结构,就不好赋值,因为咱们bitmap的结构,有可能是分开得到的,如头信息,调色板,包括数据流,都是分开得到的.如果赋给bmiColors一个RGBQUAD*指针,编译时提示非法,如果赋给他一个数组,也提示非法.所以我通常都是:
char p[sizeof(BITMAPINFOHEADER) + 0x400];
得到bmih和pPal后,再
memcpy(p, &bmih, sizeof(BITMAPINFOHEADER));
memcpy(p + sizeof(BITMAPINFOHEADER), 0x400, pPal);
PBITMAPINFO pbmi = (PBITMAPINFO)p;
这样很麻烦,且影响到了程序的执行效率.
如何做更好呢?如何理解bmiColors[1]呢?如何用普通的赋值方法给这个结构赋值呢?
如:
BITMAPINFO bmi;
bmi.bmiColors = ....;
或:
BITMAPINFO bmi = {xx, yy};
许多大论坛都没有回复的问题。。。。。。。。
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!