BITMAPINFO構造体の使い方(カラーテーブルについて)
Posted: 2010年12月18日(土) 13:21
いつもお世話になっています。
BITMAPINFOについて質問なんですが、
たとえば256個のRGBQUAD構造体でカラーテーブルを作ったとします。
でもBITMAPINFOには
typedef struct tagBITMAPINFO {
BITMAPINFOHEADER bmiHeader;
RGBQUAD bmiColors[1];
} BITMAPINFO, FAR *LPBITMAPINFO, *PBITMAPINFO;
のとおりRGBQUADの要素数1の配列しかありません。
無理やりmemcpyなどでbmiColorsの後ろにメモリをコピーしても
ランタイムエラーでbmiColorsの周りが崩壊していると怒られてしまいます。
BYTE *bi = new BYTE[sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD) * 256]
でメモリを確保して
StretchDIBitsに(BITMAPINFO*)bi
などとして渡せばうまく動くには動くのですが
これだとBITMAPINFOの存在意義がなくなってしまいます。
もっとスマートな解決方法はないでしょうか。
急ぎの疑問ではないのですがもしよろしければお願いします。
環境:Vista, VS 2005
BITMAPINFOについて質問なんですが、
たとえば256個のRGBQUAD構造体でカラーテーブルを作ったとします。
でもBITMAPINFOには
typedef struct tagBITMAPINFO {
BITMAPINFOHEADER bmiHeader;
RGBQUAD bmiColors[1];
} BITMAPINFO, FAR *LPBITMAPINFO, *PBITMAPINFO;
のとおりRGBQUADの要素数1の配列しかありません。
無理やりmemcpyなどでbmiColorsの後ろにメモリをコピーしても
ランタイムエラーでbmiColorsの周りが崩壊していると怒られてしまいます。
BYTE *bi = new BYTE[sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD) * 256]
でメモリを確保して
StretchDIBitsに(BITMAPINFO*)bi
などとして渡せばうまく動くには動くのですが
これだとBITMAPINFOの存在意義がなくなってしまいます。
もっとスマートな解決方法はないでしょうか。
急ぎの疑問ではないのですがもしよろしければお願いします。
環境:Vista, VS 2005