リソース上の画像を表示
Visual C++でBMPファイルなどの画像データを表示させる場合は、
あらかじめ画像をリソースデータとして格納しておきプログラム実行時に
「リソースデータとして確保している画像情報を表示」
するのが基本的な方法です。
【表示手順】
(1)ビットマップデータをリソースとして確保
表示させたい画像をリソースデータにします。
[挿入(I)] - [リソース(R)]
画像は新規作成するかディスク上の画像データを読み込みます。
そこで、取り込んだ画像のリソースに以下の名前を付けます。
IDB_BITMAP_SAMPLE
(2)ビットマップ表示用のデバイスコンテキストを用意
ここでは、OnPaint、OnDraw関数を使用してビットマップの表示を行います。
[OnDraw関数]
Viewクラスを使用する場合は OnDraw関数 が提供されます。
void xxxView::OnDraw(CDC* pDC)
{
コード
}
引数 pDC はディスプレイ表示用のデバイスコンテキストです。
画像表示の場合は、このpDCに直接出力するのではなくメモリ上に
別のデバイスコンテキストを用意し、そこで一旦画像イメージを生成。
・デバイスコンテキストの用意
CDC myDC; //ビットマップ表示用メモリデバイスコンテキストを用意
myDC.CreateCompatibleDC(pDC); //pDCと互換のデバイスコンテキストを生成
[OnPaint関数]
ダイアログベースのでは、「OnDraw関数」が提供されません。
そこで、「OnPaint関数」を使用します。
void xxxDlg::OnPaint()
{
コード
}
上記のように、この関数は「デバイスコンテキスト」を渡してくれません。
この場合は、自分で設定をする必要があります。
CDC* pDC = this->GetDC(); //現在のデバイスコンテキストpDC
CDC myDC; //ビットマップ表示用デバイスコンテキスト
myDC.CreateCompatibleDC(pDC); //pDCと互換のデバイスコンテキストを生成
(3)ビットマップリソースの読み込み
必要なオブジェクトを用意し、LoadBitmapメンバ関数を使ってビットマップリソース
を読み込みます。
CBitmap myBMP; //ビットマップ処理用オブジェクト
myBMP.LoadBitmap(IDB_BITMAP_SAMPLE); //画像読み込み
上記は「IDB_BITMAP_SAMPLE」というIDを持つビットマップリソースを
読み込み、myBMPオブジェクトに入れる処理です。
(4)CBitmapオブジェクトの結び付け
使用するCBitmapオブジェクトをデバイスコンテキストに結び付けてやります。
このときの現在のオブジェクトを保存しておき、後で現在復帰させます。
CBitmap* oldBMP = myDC.SelectObject(&myBMP); //旧ビットマップ保存とmyBMP選択
myDC.SelectObject(oldBMP); //元のビットマップに戻す
(5)ビットマップイメージの転送
メモリ上(myDC)に展開されたイメージをディスプレイに転送し、
目に見えるようにします。これを行うには「BitBltメンバ関数」
を使用します。
pDC->BitBlt(10,10,60,100,&myDC,0,0,SRCCOPY); //ビットマップを転送
【CDC::BitBltメンバ関数書式】
BOOL BitBlt(int x, //転送先左上隅のx座標
int y, //転送先左上隅のy座標
int nWidth, //表示させるビットマップの幅
int nHeight, //表示させるビットマップの高さ
CDC* pSrcDC, //転送元CDCオブジェクトのポインタ
int xSrc, //転送元ビットマップの左上隅のx座標
int ySrc, //転送元ビットマップの左上隅のy座標
DWORD dwRop); //転送方法
戻り値 : 正常終了時 = 非0、異常終了 = 0
| dwRop指定 | |
|---|---|
| 説明 | |
| BLACKNESS | すべての出力を黒にする |
| DSTINVERT | パターンビットマップと転送元ビットマップを論理AND結合 |
| MERGEPAINT | 反転した転送元ビットマップと転送先ビットマップを論理OR結合 |
| NOTSRCCOPY | 反転した転送元ビットマップを転送先ビットマップにコピー |
| NOTSRCERASE | 転送元ビットマップと転送先ビットマップを論理OR結合し結果を反転 |
| PATCOPY | パターンビットマップを転送先ビットマップへコピーする |
| PATINVERT | パターンビットマップと転送先ビットマップを論理XOR結合 |
| PATPAINT | 反転した転送元ビットマップとパターンビットマップを論理OR結合 さらにその結果と転送先ビットマップを論理OR結合 |
| SRCAND | 転送元のビットマップと転送先ビットマップのピクセルを論理AND結合 |
| SRCCOPY | 転送元ビットマップを転送先ビットマップにコピー |
| SRCINVERT | 転送先ビットマップのピクセルと転送元ビットマップを論理XOR結合 |
| SRCPAINT | 転送先ビットマップのピクセルと転送元ビットマップを論理OR結合 |
| SRCERASE | 転送先ビットマップを反転し、その結果と転送元ビットマップを論理AND結合 |
| WHITENESS | すべての出力を白にする |