デバイス非依存ビットマップを作るには BITMAPINFO 型の変数に必要な情報を詰めて CreateDIBSection() 関数へ渡しますが、普通に作ると原点が左下になります。
DirectX や Win32API のように原点を左上にするためには BITMAPINFO 型の変数の bmiHeader.biHeight メンバにマイナスの値を設定します。
BITMAPINFO bmpInfo; ::ZeroMemory(&bmpInfo, sizeof(BITMAPINFO)); bmpInfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); bmpInfo.bmiHeader.biWidth = 640; bmpInfo.bmiHeader.biHeight = -480; // ←ここ bmpInfo.bmiHeader.biPlanes = 1; bmpInfo.bmiHeader.biBitCount = 32; bmpInfo.bmiHeader.biCompression = BI_RGB;
ちなみに、このサイトで配布している template.cpp では、クライアント領域の高さを保持している iClientHeight が unsigned int なので普通に書くと警告が出ます。
そこで…
bmpInfo.bmiHeader.biHeight = 0 - ::iClientHeight;
…とかやっています。
Contributions