先にご返信されていた MORさんのお書き込みが消えてしまったので遅ればせながらご返信します
MakeScreen による『描画先にできるグラフィックハンドルを作成する機能』と、GraphBlendBlt による
『RGBA の色を入れ替える機能』を使用すれば実現できます
こちらに『中心に穴の開いた黒い画像の向こう側に左右に動く縦の棒がある』プログラムを
組んでみましたので、よろしければご覧ください
#include "DxLib.h"
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
int Screen ;
int HoleGraph ;
int x ;
int xadd ;
// ウインドウモードで起動
ChangeWindowMode( TRUE ) ;
// DXライブラリの初期化
if( DxLib_Init() < 0 ) return -1 ;
// 穴が開いた画像を描画するための仮画面を作成
Screen = MakeScreen( 640, 480, TRUE ) ;
// 穴が開いた画像の穴の部分を透過する画像作成用の仮画面を作成
HoleGraph = MakeScreen( 640, 480, TRUE ) ;
// 描画先を穴が開いた画像を描画するための仮画面に変更
SetDrawScreen( Screen ) ;
// 画像全体を赤色で塗りつぶす
DrawBox( 0, 0, 640, 480, GetColor( 255,0,0 ), TRUE ) ;
// 画面中心に黒色のアンチエイリアス付きの円を描画する
DrawCircleAA( 320.0f, 240.0f, 200.0f, 64, GetColor( 0,0,0 ), TRUE ) ;
// 画像合成関数を使用して、赤色の部分だけを透過しない黒い画像を作成する
GraphBlendBlt( Screen, Screen, HoleGraph, 255, DX_GRAPH_BLEND_RGBA_SELECT_MIX, DX_RGBA_SELECT_SRC_G, DX_RGBA_SELECT_SRC_G, DX_RGBA_SELECT_SRC_G, DX_RGBA_SELECT_SRC_R ) ;
// 画面上を左右に動く棒の処理用の変数を初期化
x = 0 ;
xadd = 8 ;
// 背景色を灰色にする
SetBackgroundColor( 128,128,128 ) ;
// 描画先を裏画面にする
SetDrawScreen( DX_SCREEN_BACK ) ;
// メインループ
while( ProcessMessage() == 0 )
{
// 画面のクリア
ClearDrawScreen() ;
// 画面を左右に動く棒の処理
x += xadd ;
if( x < 0 || x > 640 )
{
xadd = -xadd ;
}
// 棒を描画
DrawBox( x, 0, x + 64, 480, GetColor( 255,255,255 ), TRUE ) ;
// 真ん中が穴の開いた黒い画像を描画
DrawGraph( 0, 0, HoleGraph, TRUE ) ;
// 裏画面の内容を表画面に反映
ScreenFlip() ;
}
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
まず MakeScreen で作成した『描画先にできる画像( Screen )』の全体を赤で塗りつぶした後、中心に黒い円を描画します
次に別の『描画先にできる画像( HoleGraph )』に GraphBlend の DX_GRAPH_BLEND_RGBA_SELECT_MIX を使用して
Screen の色成分の以下のように入れ替えています
Screen の緑成分 → HoleGraph の赤成分
Screen の緑成分 → HoleGraph の緑成分
Screen の緑成分 → HoleGraph の青成分
Screen の赤成分 → HoleGraph の透過成分
Screen は『中心に穴の開いた赤い画像』で緑成分は 0 なので『Screen の緑成分』を転送された『HoleGraph の赤・緑・青成分』は
真っ黒になります、これで HoleGraph が黒い画像になります、そして HoleGraph の透過成分( アルファチャンネル )として
『Screen の赤成分』が転送されるので、HoleGraph は『中心に透過の穴の開いた黒い画像』となるわけです
こうして出来上がった HoleGraph は DrawGraph で透過処理ON( 第三引数 TRUE )で描画するだけで中心に穴の開いた黒い画像となります
よろしければお試しください m(_ _)m