LoadImage()関数


HANDLE LoadImage(
 HINSTANCE hinst,
 LPCTSTR lpszName,
 UINT uType,
 int cxDesired,
 int cyDesired,
 UINT fuLoad
);

uTypeの指定
IMAGE_BITMAPLoads a bitmap.
IMAGE_CURSORLoads a cursor.
IMAGE_ICONLoads an icon.

fuLoadの指定
LR_DEFAULTCOLORデフォルトのフラグです。
LR_CREATEDIBSECTIONDIB形式のファイルとして扱います。
LR_DEFAULTSIZEこのフラグを指定し、cxDesired(cyDesired)パラメータに0を指定すると、アイコンやカーソルのためのシステムメトリック値がイメージの幅(高さ)になります。
この値を指定せず、cxDesired(cyDesired)パラメータに0を指定すると、実際のリソースのサイズがイメージの幅(高さ)になります。
LR_LOADFROMFILElpszNameパラメータが指定するファイルからイメージをロードします。このフラグが指定されていない場合、lpszNameはリソースの名前になります。



HBITMAP hBitmap;

// リソースからロードする場合の例
hBitmap = ( HBITMAP )LoadImage(
 GetModuleHandle( NULL ) // ロードするイメージが入ったモジュールのインスタンスハンドルを指定
, MAKEINTRESOURCE( IDB_BITMAP1 ) // リソース名
, IMAGE_BITMAP // 属性
, 0 // 0かつLR_DEFAULTSIZEを含んでいない時は実際のリソースの幅
, 0 // 0かつLR_DEFAULTSIZEを含んでいない時は実際のリソースの高さ
, LR_DEFAULTCOLOR // デフォルトのフラグ
);

// ファイルからロードする場合の例
hBitmap = ( HBITMAP )LoadImage(
 NULL // ファイルをロードするときはNULLを指定
, BITMAPNAME // ファイル名
, IMAGE_BITMAP // 属性
, 0 // 幅
, 0 // 高さ
, LR_LOADFROMFILE // このフラグが指定されていない場合lpszNameはリソースの名前になる
);

if ( !hBitmap ) {
 MessageBox( hWnd, "画像のローディングに失敗しました", NULL, MB_OK | MB_ICONSTOP );
 return FALSE;
}

Windows > グラフィック | comments (0) | trackbacks (0)

メモリデバイスコンテキスト

アプリケーションがスクリーン表面にビットマップを表示する場合、
ウィンドウのデバイスコンテキストに直接ビットマップオブジェクトを
設定することはできません。
ビットマップオブジェクトは、メモリデバイスコンテキストのオブジェクトに
一度設定した後、
デバイスコンテキスト間のコピーを行う事でウィンドウへ描画されます。
CreateCompatibleDC()関数は、指定されたデバイスと
互換性のあるメモリデバイスコンテキストを作成します。

HDC CreateCompatibleDC(
 HDC hdc
);

メモリデバイスコンテキストは仮想デバイスなので、
このデバイスが扱うビットマップが必要になります。
CreateCompatibleBitmap()関数は、指定されたデバイスと
互換性のあるビットマップを作成します。

HBITMAP CreateCompatibleBitmap(
 HDC hdc,
 int nWidth,
 int nHeight
);

このビットマップを互換性のあるメモリデバイスコンテキストに
SelectObject()関数を使って設定すれば、
この仮想画面に通常のグラフィック描画関数を使って描画できます。

CreateCompatibleBitmapは使用しなくても表示は可能ですが、
いくつも画像を重ねる場合は仮想画面にまとめて描画してから
転送した方がちらつきが抑えられると言われています。


かなり抜粋

HDC hdc;
static HDC hMemDC;
static HBITMAP hBitmap;

hdc = GetDC( hWnd );
// ウィンドウと同じ仮想画面を作る
hMemDC = CreateCompatibleDC( hdc );
hBitmap = CreateCompatibleBitmap( hdc, 640, 480 );
SelectObject( hMemDC, hBitmap );
ReleaseDC( hWnd, hdc );


※デバイスコンテキストに対するオブジェクトの設定は、
そのデバイスコンテキストが解放されるまで有効です。
※オブジェクトの設定はデバイスの取得ごとに行う必要があります。
※任意に生成したカスタムオブジェクト自体は、
DeleteObject()関数によってオブジェクトが消去されるまで有効です。
カスタムオブジェクトはアプリケーションの終了時には
すべて消去していないといけません。
※デバイスコンテキストは不要になったらDeleteDC()関数を呼び出して
デバイスコンテキストを解放しなければいけません。


DeleteDC( hMemDC ); // メモリデバイスコンテキストの消去
DeleteObject( hBitmap ); // ビットマップオブジェクトの消去

Windows > グラフィック | comments (0) | trackbacks (0)

BitBlt()関数


BOOL BitBlt(
 HDC hdcDest,
 int nXDest,
 int nYDest,
 int nWidth,
 int nHeight,
 HDC hdcSrc,
 int nXSrc,
 int nYSrc,
 DWORD dwRop
);


hdcDest転送先となるデバイスコンテキスト
nXDest転送先の左上隅のx座標
nYDest転送先の左上隅のy座標
nWidth転送先の幅
nHeight転送先の高さ
hdcSrc転送元のビットマップを保持するデバイスコンテキスト
nXSrc転送元の左上隅のx座標
nYSrc転送元の左上隅のy座標
dwRop実行するラスタオペレーションを示す定数


ラスタオペレーション
BLACKNESS物理パレットのインデックス0に対応する色(デフォルトは黒)でコピー先の長方形を塗りつぶす
SRCANDコピー元の色とコピー先の色を論理AND演算子で結合する
SRCCOPYコピー元をコピー先にそのままコピーする
SRCERASEコピー先の色を反転した色とコピー元の色を論理AND演算子で結合する
SRCINVERTコピー元の色とコピー先の色を論理XOR演算子で結合する
SRCPAINTコピー元の色とコピー先の色を論理OR演算子で結合する
WHITENESS物理パレットのインデックス1に対応する色(デフォルトは白)でコピー先の長方形を塗りつぶす
Windows > グラフィック | comments (0) | trackbacks (0)