第3章 画像の表示・動作

3-3 透明色(カラーキー)の指定

DirectDrawでは、カラーキーと呼ばれる色をサーフェイスに設定することにより、ブロック転送時にこの色の部分を転送しないように設定できる。これにより、背景を透かすことができる。これをスプライト処理と呼ぶ。

※カラーキーについては用語集の「カラーキー」の項を参照

(a) カラーキーを指定するには

カラーキーは、Microsoftが作成したDirectDraw汎用モジュール「ddutil.cpp」に入っているDDSetColorKey関数を使って設定できる。DDSetColorKey関数はサーフェイスのカラーキーを設定する機能を持つ。

DDSetColorKey(
  カラーキーを指定するサーフェイス,
  カラーキーにする色
);

カラーキーにする色の指定には、次の方法がある。

1.透明色にしたい色を直接指定する:RGB(Rの値, Gの値, Bの値)
RGBで指定された色を、透明色(カラーキー)に指定する。
2.左上1ピクセルの色を透明色に指定する:CLR_INVALID
ビットマップ画像の左上1ピクセルに使用している色を、透明色(カラーキー)に指定する。

※カラーキーは、オフスクリーン・サーフェイス作成時に設定する。

《例1》

オフスクリーン・サーフェイス・オブジェクト「g_pDDSGame」に対して、RGB(21, 141, 91)を透明色に指定する。

g_pDDSGame = DDLoadBitmap(g_pDD, szGameBmp, 0, 0);
if (g_pDDSGame == NULL)
    return InitFail(hWnd, hRet, "DDLoadBitmap GameBmp FAILED");
DDSetColorKey(g_pDDSGame, RGB(21, 141, 91));  // カラーキー(抜き色)を指定

《例2》

オフスクリーン・サーフェイス・オブジェクト「g_pDDSGame」に対して、左上1ピクセルの色を透明色に指定する。

g_pDDSGame = DDLoadBitmap(g_pDD, szGameBmp, 0, 0);
if (g_pDDSGame == NULL)
    return InitFail(hWnd, hRet, "DDLoadBitmap GameBmp FAILED");
DDSetColorKey(g_pDDSGame, CLR_INVALID);  // カラーキー(抜き色)を指定

《補足》

RGB値の調べ方は、実習編「DirectX小技集」を参照。

(b) カラーキーを使って画像を転送する

画像転送時、指定したカラーキーを使うかどうかはオプションによって指定する。

g_pDDSBack->BltFast(0, 0, g_pDDSStart, &startRect, DDBLTFAST_NOCOLORKEY);

指定できるオプションは次のとおり。(DirectX7 Helpより)

DDBLTFAST_DESTCOLORKEY
転送先カラーキーを使用する透過型ブリット。
DDBLTFAST_NOCOLORKEY
非透過型の通常のコピーブリット。
DDBLTFAST_SRCCOLORKEY
転送元カラーキーを使用する透過型ブリット。
DDBLTFAST_WAIT
ブリットがビジーの場合、DDERR_WASSTILLDRAWING メッセージを返さずに待機する。ブリットがセットアップされるか、あるいは別のエラーが発生すると即座に返す。

DDBLTFAST_NOCOLORKEYを指定すれば、カラーキーを含む画像でも、そのまま転送する。DDBLTFAST_SRCCOLORKEYを指定すると、カラーキーに指定された色は転送されず、その色を使っているところは透明になる
(詳しくは用語集の「カラーキー」の項を参照)

確認問題

スタート画面用サーフェイス、ゲーム画面用サーフェイスにそれぞれカラーキーを設定し、「タイトル画像」「スタート画像」、ゲーム画面での「キャラクタ画像」をカラーキーを指定して転送せよ。

[ 実行結果サンプル ]


[ TOP ] [ Next ]