DXライブラリで、描画した図形に穴をあける
DXライブラリを利用して児童向けの学習教材を作成しているのだが、MakeScreen()したグラフィックに描画した矩形などの図形に穴をあけて背景を透過させる必要が出てきた。
DrawCircle() などの関数に指定する色に透明色?が指定できれば良いのだが、DXライブラリで使用する色コードには透明度の情報はない。
最初、マスク関係関数の機能を利用すればできそうかなと考えたが、マスクデータがDXライブラリのグラフィックではなくバイナリの配列データで用意する必要があり面倒。
もうちょっと手軽にできる方法はないかと検索してみたら、DXライブラリ質問掲示板で 「MakeGraph() による背景の透明化」という記事を見つけた。
その記事によると、SetDrawBlendMode()で、乗算モードを指定してパラメーターに0を指定することで、描画時のアルファチャンネルの値を0にすることができるらしい。この時、乗算モードを指定するのをリファレンスに記載されている DX_BLENDMODE_MULA(11)ではなく、DX_BLENDMODE_MUL(4)を指定しなくてはいけない。ここら辺の仕組みリファレンスに記載がないので何がどうしてどうなってるのかさっぱりだが、とりあえず試してみると期待していた描画ができた。
// ■ 穴の開いた矩形を描画する。 // 矩形を描く DX.DrawBox(0, 0, 640, 480, red , DX.TRUE); // ブレンドモードで乗算モードを指定 DX.SetDrawBlendMode(DX.DX_BLENDMODE_MUL, 0); // ここで描画した円はアルファチャンネルが0で描画されるため透明になる。 // 結果として透明になるので指定する色は何色でも良い。 DX.DrawCircle(100, 100, 50, WHITE, DX.TRUE); // ブレンドモードを元に戻す DX.SetDrawBlendMode(DX.DX_BLENDMODE_NOBLEND, 255);