BMP ファイルを表示する関数を定義

VC++ の LoadImage() を使って BMP ファイルを表示する関数を定義します。

前田稔(Maeda Minoru)の超初心者のプログラム入門

プロジェクトの設定

  1. 新規プロジェクト(BmpFile)を作成して下さい。
  2. ファイルから直接画像を入力して表示する関数です。
    関数の宣言が終わった後に、最初の関数として追加して下さい。
    BitBlt() が画像を描画する関数で、hBmpDC の座標 0,0 から hdc の 座標 0,0 にイメージ画像を転送します。
    BitBlt() の詳細は BMP 画像を表示する を参照して下さい。
        //★ BMP 画像を表示する
        HRESULT ShowBMP(HDC hdc, LPCSTR szBitmap)
        {   HBITMAP         hBmp;
            HDC             hBmpDC;
            BITMAP          bm;
    
            //ファイルからイメージをロード
            hBmp = (HBITMAP)LoadImage(NULL,szBitmap,IMAGE_BITMAP,0,0,
                                      LR_LOADFROMFILE|LR_CREATEDIBSECTION);
            if (hBmp==NULL)
            {   OutputDebugString("Load Image Error\n");
                return FALSE;
            }
            hBmpDC= CreateCompatibleDC(hdc);
            SelectObject(hBmpDC,hBmp);
            GetObject(hBmp,sizeof(bm),&bm);
            BitBlt(hdc,0,0,bm.bmWidth,bm.bmHeight,hBmpDC,0,0,SRCCOPY);
            DeleteDC(hBmpDC);
            DeleteObject(hBmp);
            return TRUE;
        }
        
  3. WM_PAINT に画像を表示するコードを追加します。
    空のプロジェクトからプログラムを作成する で作成したソースコードでは、TextOut() でメッセージを表示していました。
    TextOut() が記述されているときは、コメントアウトして ShowBMP() を追加して下さい。
    "ayu.bmp" が表示する BMP ファイルの指定です。
    テストするときは、適当な BMP ファイルをプロジェクトのフォルダーに格納しておいて下さい。
        case WM_PAINT:
            hdc = BeginPaint (hWnd, &ps);
            // TODO: この位置に描画用のコードを追加してください...
            //TextOut(hdc, 40, 70, "空のプロジェクトから作成しました", 32);
            ShowBMP(hdc,"ayu.bmp");
            EndPaint( hWnd, &ps );
            break;
        
  4. [デバッグ][デバッグなしで開始] を選択してビルドに続いて実行を行います。
    用意した BMP 画像が表示されたら完成です。

【演習】

  1. 実行形式のプログラム(*.exe)はプロジェクトの Debug のフォルダーに格納されています。
    Debug のフォルダーから直接ダブルクリックで起動してみて下さい。
    プログラムは起動できても BMP ファイルが認識できません。
    原因は BMP ファイルが格納されているフォルダーに path(パス)が通っていないからです。
  2. Debug のフォルダーに BMP ファイルをコピーして起動してみて下さい。
    こんどは正常に描画されるはずです。
  3. 一般的には BMP ファイルを実行形式のプログラムと同じフォルダーに置くか、または格納されているフォルダーをフルパスで指定します。
    例えば、C:\Image\ayu.bmp を表示するときは、次のように書きます。
    ShowBMP(hdc,"C:\\Image\\ayu.bmp");
  4. 課題を提出するときは、特に注意が必要です。
    ShowBMP(hdc,"C:\\Image\\ayu.bmp"); と書いて正常に実行されることを確かめて提出しても、提出課題を確認する マシンには C:\Image のフォルダーがあるとは限りませんし、まして ayu.bmp が格納されていることは期待できません。
    課題を提出するときは、プロジェクトのフォルダーに直接画像を格納して下さい。
    提出課題の確認は、プロジェクトのフォルダーに格納されている *.vcproj を起動して行います。

超初心者のプログラム入門(Win32API C++)