bmiColors字段的BITMAPINFO结构

wow*_*bob 1 c++ windows arrays struct

BITMAPINFO 结构有以下声明

typedef struct tagBITMAPINFO {
    BITMAPINFOHEADER bmiHeader;
    RGBQUAD bmiColors[1];
} BITMAPINFO;
Run Code Online (Sandbox Code Playgroud)

为什么RGBQUAD数组是静态的?为什么它不是指针?

Han*_*ant 5

声明一个变量大小的结构是一个标准的技巧.颜色表从不只有一个条目,对于单色位图至少有2个,对于8bpp位图通常为256,等等.由bmiHeader.biClrUsed成员指示.所以struct的实际大小取决于位图格式.

由于C语言不允许声明这样的数据结构,因此这是最接近的匹配.创建结构需要malloc()分配足够的字节来存储结构,从biClrUsed计算.然后一个简单的转换为(BITMAPINFO*)使它可用.