画像処理 ビットマップ ダブルバッファリング
「猫でもわかるWindowsプログラミング」を参考に、ビットマップを表示するプログラムを作っています。
下記ソース(WM_PAINT部分のみ抜粋)のような感じで、
読み込んだビットマップをダブルバッファリングを用いて表示させたいのですが、
何も表示させることができず、困っております。
LRESULT CALLBACK WndProc( HWND hwnd, UINT msg, WPARAM wp, LPARAM lp )
{
HBITMAP hBmp;
BITMAP bmp_info;
HDC hDC, hDC_mem;
PAINTSTRUCT ps;
int w=0, h=0;
switch (msg) {
case WM_PAINT:
hDC = BeginPaint(hwnd,&ps);
hDC_mem = CreateCompatibleDC(hDC);
hBmp=LoadBitmap(hInst, TEXT("MYBMP"));
hBmp = (HBITMAP)LoadImage(hInst, TEXT("MYBMP"), IMAGE_BITMAP,
0, 0, LR_DEFAULTCOLOR);
GetObject(hBmp, (int)sizeof(BITMAP), &bmp_info);
w = bmp_info.bmWidth;
h = bmp_info.bmHeight;
SelectObject(hDC_mem, hBmp);
BitBlt(hDC, 0, 0, w, h, hDC_mem, 0, 0, SRCCOPY);
DeleteDC(hDC_mem);
DeleteObject( hBmp );
EndPaint( hwnd, &ps );
break;
}
}
リソースですが、下記のように bitmap1.bmpを指定しており、画像はもちろんフォルダ内に入れ、
読み込める状態にはしています。
//
// Bitmap
//
MYBMP BITMAP "bitmap1.bmp"
#endif // 日本語 resources
しかし、hBmpの戻り値を調べると NULL の値が入っています。当然画像は表示されません。
当方、Microsoft visual studio 2005を使っておりますが、このプロジェクトは、
Win32コンソールアプリケーション⇒Windowsアプリケーション で作成はせず、
Win32コンソールアプリケーション⇒コンソールアプリケーション で作成していますので、
ここが問題になっているのでしょうか?
できれば、コンソールアプリケーションで作成したいですが、LoadImage関数は使えないのでしょうか?
それとも他に問題点があるのでしょうか?
以前は動画処理をしており、SetDIBitsToDevice関数を使って配列の中身を指定し、画像をウィンドウ上に表示していました。
しかし、画像のちらつきが気になったため、ダブルバッファリングに改良しようとし、
調べてみたところ、ビットマップを用いるやり方が一般的なようでした。
そこで、まずはビットマップの表示をさせるプログラムをつくってみようと思ったのですが、つまずいている状態です。
環境は、
Microsoft Windows XP Home Edition Version2002 Service Pack 3
Pentium(R) 4 CPU 2.80GHz 1.0GB RAM
Microsoft visual studio 2005(有料)
です。
何かアドバイスをよろしくお願いします。
お礼
御礼遅れました。ありがとうございました。