>>179
原因は133行目の&lpPixel。
hBMP = CreateDIBSection(hdc , &biInfo , DIB_RGB_COLORS , (LPVOID *)(&lpPixel) , NULL , 0);

hBMP = CreateDIBSection(hdc , &biInfo , DIB_RGB_COLORS , (LPVOID *)(lpPixel) , NULL , 0);

おかしな指定をしたせいで、lpPixelのポインタの値が変な値に書き換わって壊れてしまっている。
HeapAllocしたときのlpPixelの値と133行目でのlpPixelの値を調べてみれば、壊れているのが分かるはず。
なぜ、上の指定の仕方ではいけないのか、とか、どうして値が壊れるのかとかは、自分で考えてみてね。