黒白の呪いから解放

 ようやく画像が黒白(白のみ?)になるバグから解放された。
 本当に良く分からないバグだが、CreateCompatibleDC(4行目)でhdcSurfと互換性のあるhdcBitmapという名前のデバイスコンテキストを作成して、その情報に基づいてCreateDIBBitmapを実行してBitmapを作成しようとすると、何故か1bitのビットマップハンドルが作成されて返ってくる。


// ビットマップリソースをサーフェスに転送
HDC hdcBitmap;
HDC hdcSurf;
if(SUCCEEDED(this->lpSurface->GetDC(&hdcSurf))){
hdcBitmap=CreateCompatibleDC(hdcSurf);
if( ( hbitmap=CreateDIBitmap(hdcBitmap,&bmih,CBM_INIT,pPixelBit,&bmi,DIB_RGB_COLORS))!=NULL){
Log::instance()->Out("ビットマップのハンドルの作成に成功");
SelectObject(hdcBitmap,hbitmap);
BitBlt(hdcSurf,0,0,size.xi(),size.yi(),hdcBitmap,0,0,SRCCOPY);
Log::instance()->Out("DirectDrawサーフェスに転送完了");
DeleteObject(hbitmap);
}
this->lpSurface->ReleaseDC(hdcSurf);
}

 んで、こっちが修正後
 こうすると、ちゃんと24bitで作成される。
 互換性のあるデバイスコンテキストのくせに何故1bitなのかは分からない……。
 


// ビットマップリソースをサーフェスに転送
HDC hdcBitmap;
HDC hdcSurf;
if(SUCCEEDED(this->lpSurface->GetDC(&hdcSurf))){
if( ( hbitmap=CreateDIBitmap(hdcSurf,&bmih,CBM_INIT,pPixelBit,&bmi,DIB_RGB_COLORS))!=NULL){
Log::instance()->Out("ビットマップのハンドルの作成に成功");
hdcBitmap=CreateCompatibleDC(hdcSurf);
SelectObject(hdcBitmap,hbitmap);
BitBlt(hdcSurf,0,0,size.xi(),size.yi(),hdcBitmap,0,0,SRCCOPY);
Log::instance()->Out("DirectDrawサーフェスに転送完了");
DeleteObject(hbitmap);
}
this->lpSurface->ReleaseDC(hdcSurf);
}

 誰か教えて。>偉い人