The Tips for Developers > BITMAPを表示する

BITMAPを表示する(最終更新日 2003/10/22)

BITMAPとは・・・
BITMAP とは Windows が標準でサポートしている画像フォーマットである。

画像の 1 ピクセル当たりのビット数により、以下のような種類がある。
ビット数 内容
1 白黒ビットマップである。
4 最大 16 色のビットマップである。
8 最大 256 色のビットマップである。
16 最大 2^16 = 65,536 色のビットマップである。
24 最大 2^24 = 16,777,216 色のビットマップである。
32 最大 2^32 = 4,294,967,296 色のビットマップである。
フォーマットは、ビット数に応じて、様々である。
以下のサンプルプログラムは、SDI で作成し、すべてのビットマップを表示する。
BITMAPファイルの読み込み
BITMAPファイルを読み込む場合、Win32 API の LoadImage 関数を使用する。
HANDLE LoadImage(
       HINSTANCE hInst,
       LPCTSTR lpszName,
       UINT uType,
       int cxDesired,
       int cyDesired,
       UINT fuLoad   )
hInst ビットマップファイルを読み込む場合、NULL を指定する
lpszName 読み込むファイル名を指定する
uType ビットマップファイルを読み込む場合、IMAGE_BITMAP を指定する
cxDesired 実際のリソースの幅を表示する場合、0 を指定する
cyDesired 実際のリソースの幅を表示する場合、0 を指定する
fuLoad 以下の組み合わせである。(or 演算子で連結する)
LR_DEFAULTCOLOR デフォルトのフラグ
LR_MONOCHROME でないことのみを指定
LR_CREATEDIBSECTION DIBセクションマップを戻り値に設定
LR_DEFAULTSIZE このフラグを指定し、cxDesired および cyDesired を 0 にした場合、表示にシステムメトリックが使用される
このフラグを指定しない場合、実際のリソースのサイズが使用される
LR_LOADFROMFILE lpszName で指定されるファイルからイメージを読み込む
LR_LOADMAP3DCOLORS イメージ内の灰色部(ダークグレー、グレー、ライトグレー)を対応する 3D カラーに置き換える
LR_LOADTRANSPARENT イメージ内の最初のピクセルの色を取得し、カラーテーブル内の対応するエントリをデフォルトウィンドウカラー (COLOR_WINDOW) に置き換える
LR_MONOCHROME イメージを白黒で読み込む
LR_SHARED イメージハンドルを共有する
LoadImage 関数の戻り値を HBITMAP 型にキャストして、対象の BITMAP へのハンドルを取得する。
以下の例では、ドキュメントクラス内の OnOpenDocument 関数内で上記関数の呼び出しと、BITMAP へのハンドルの取得を行っている。(m_hMyBitmap は HANDLE 型の private 変数としてある。)
実際に描画するためのコーディングはビュークラス内の OnDraw 関数内に記述する。

CDocument クラスのグローバルメンバ関数である GetBitmapHandle 関数は、上記の BITMAP へのハンドルを取得する。
通常、BITMAP の表示は以下の手順で行う。
CBitmap クラスの初期化 BITMAP ハンドルを用いて、CBitmap オブジェクトを構築する
メモリデバイスコンテキストの作成 表示デバイスと同等なメモリ領域を構築する
オブジェクトの選択 メモリデバイスオブジェクトに対し、対象オブジェクトを選択する
BITMAP構造体の取得 オブジェクト情報を取得する
画面への表示 BitBlt 関数を使用し、表示デバイスへのデータ転送を行う
メモリデバイスコンテキストの解放 メモリデバイスコンテキストを開放する
なお、上記例では、表示したのち、ウィンドウサイズを修正するために ChangeViewSize 関数という、ビュークラスの独自メンバ関数を呼び出している。

サンプルはこちらから