GetDIBitsは、指定されたハンドルのDDBのピクセルデータ列を指定のメモリ領域に格納するWindowsAPI・・・。
CreateDIBitmapがDIBからDDBへの変換を行うための関数とすると、このGetDIBitsは逆でDDBからDIBへの変換を行うことができる・・・。
LoadImageで読み込んだDDB"test.bmp"を、ウィンドウ破棄時にDIBに変換して"test2.bmp"として保存する・・・。
LoadImageで"test.bmp"をロードし、
WM_PAINTで表示・・・。
ここまでは破棄処理・・・。
BITMAPINFOのbiも保存するので、わかっている情報は予めセットしておかないといけない・・・。
ピクセルデータ列のところはNULLにして、biのアドレスだけ渡してGetDIBitsを呼ぶ・・・。
そうすると、bi.bmiHeader.biSizeImageにピクセルデータ列のサイズが格納される・・・。
このサイズのメモリを確保・・・。
確保したメモリアドレスとbiを渡して、再びGetDIBitsを呼ぶと、ピクセルデータ列が格納される・・・。
biの項目全てを1回目で入れてくれればいいのだが、どうもそうではないらしくbi.bmiHeaderの大半はセットしておかないといけないみたい・・・。
BITMAPFILEHEADERのbfhのほうにも、情報をセットしておく・・・。
ファイルに書き込む・・・。
残りの破棄処理・・・。
最初、test.bmpだけの状態・・・。
実行して、表示されて、ウィンドウを閉じて、プログラムを終わると、
test2.bmpができている・・・。