CreateDIBSection

WindowsAPI(Win32API) Advent Calendar 2015 1日目
WindowsAPI(Win32API) Advent Calendar 2015 - Adventar

CreateDIBSectionは、DIBセクションを作成するWindowsAPI・・・。

CreateDIBSection 関数
DIBSectionを作る【Windowsプログラミング研究所】

DIBセクションは、DDBとDIBの両方の機能を持ったもので、ビットマップハンドルでDDBとしてアクセスすることもできるし、ピクセルデータ列を更新することでDIBとしても扱える・・・。
ピクセルデータ列のメモリを別途確保する必要は無く、この関数を呼ぶとピクセルデータ列を自動確保し、そこのアドレスが取得できる・・・。
ただし、そのアドレスを手動で解放してはいけないので注意・・・。

lpBitsPixelという空のポインタのアドレスを(void **)で渡すと、そこにピクセルデータ列のアドレスが入るのでDIBとしてアクセスできる・・・。
そして、戻り値hDIBSectionにハンドルも入るのでDDBとしても使える・・・。
前後を見ても、ピクセルデータ列用のメモリを確保していないのがわかるだろう・・・。

描画する時は、hDIBSectionをBitBltに渡してDDBとして使う・・・。

保存するときは、lpBitsPixelをWriteFileに渡してDIBとして使っている・・・。
lpBitsPixelはシステムによって勝手に解放されるので、deleteなどで解放してはいけない・・・。

f:id:BG1:20151201150711p:plain

DDBとして読み込んだtest.bmp・・・。

f:id:BG1:20151201150805p:plain

DIBとして保存したtest2.bmp・・・。

Sample/CreateDIBSection.cpp at master · bg1bgst333/Sample · GitHub