BMP 画像に透明色を設定して描画する

VC++ で BMP ファイルから透明色を設定して Image List に登録して、通常の画像と並べて描画します。

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

プロジェクトの設定

  1. 空のプロジェクトを作成して、次のファイルを格納して下さい。
    画像は 80×96×8bit を使っていますが、画像の仕様が統一されていれば違っていてもかまいません。
    Main.cpp メインプログラム
    Enemy00.bmp 背景を黒で塗りつぶした Enemy の BMP ファイル
    Enemy01.bmp 背景を黒で塗りつぶした Enemy の BMP ファイル
  2. Main.cpp を [プロジェクト][既存項目の追加] からプロジェクトに追加します。
    画像は BMP ファイルから直接入力します。
  3. ビルドに続いて実行を行います。
    ページ先頭の画像のように、ウインドウに画像が表示されたら完成です。

プログラムの説明

  1. CommonControls を使うときは commctrl.h を取り込んで COMCTL32.LIB をリンクして下さい。
    hImage が Image List の定義です。
        #include    <windows.h>
        #include    <commctrl.h>
        #pragma     comment(lib,"comctl32.lib")
    
        HINSTANCE   g_hInst;
        HWND        g_hWnd;
        HIMAGELIST  hImage;
        
  2. WinMain() は何時もと同じでウインドウを表示するだけです。
  3. WM_CREATE では InitCommonControls() で初期化します。
    AppInit() 関数で Image List を生成して画像を登録します。
            case WM_CREATE:
                InitCommonControls();
                AppInit();
                break;
        
  4. WM_PAINT: では ImageList_Draw() で Image List に登録された画像を表示します。
    その横に並べて通常の方法で画像を表示してみました。
    透明色の効果を確認して下さい。
            case WM_PAINT:
                hdc = BeginPaint(hWnd, &ps);
                ImageList_Draw(hImage,0,hdc,20,20,ILD_NORMAL);
                ImageList_Draw(hImage,1,hdc,120,20,ILD_NORMAL);
                ViewBMP(hWnd,"Enemy00.bmp",220,20);
                ViewBMP(hWnd,"Enemy01.bmp",320,20);
                EndPaint(hWnd, &ps);
                break;
        
  5. プログラムを終了する前に Image List を破棄して下さい。
            case WM_DESTROY:
                ImageList_Destroy(hImage);
                PostQuitMessage(0);
                return 0L;
        
  6. Image List を生成して画像を登録する関数 AppInit() です。
    ImageList_Create() で Image List を生成します。
    80,96 が画像のサイズで、ILC_COLOR8 が256色の指定で ILC_MASK が透明色を使用するフラグです。
    2が登録する枚数で、最後のパラメータにはゼロを指定して下さい。
    LoadImage() でファイルから画像を入力します。
    ImageList_AddMasked() で黒を透明色 RGB(0,0,0) に設定して Image List に登録します。
    RGB(0,0,0) が透明色に設定する色の指定です。
        void  AppInit()
        {   HBITMAP     hBmp;
            hImage = ImageList_Create(80,96,ILC_COLOR8 | ILC_MASK,2,0);
            hBmp= (HBITMAP)LoadImage(NULL,"Enemy00.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
            ImageList_AddMasked(hImage,hBmp,RGB(0,0,0));
            DeleteObject(hBmp);
            hBmp= (HBITMAP)LoadImage(NULL,"Enemy01.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
            ImageList_AddMasked(hImage,hBmp,RGB(0,0,0));
            DeleteObject(hBmp);
        }
        

【演習】

  1. BMP 画像を表示する関数 ViewBMP() を作成してプログラムを完成させて下さい。
    BMP 画像の表示は BMP ファイルを表示する を参照して下さい。

超初心者の方のために全ソースコードを掲載します。 (^_^;)
全ソースコード

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