SetDrawArea で円の範囲を指定することはできません
なので、MakeScreen と SetBlendGraphParam を使った処理で
円形の描画範囲のようなものを実現する方法をお使いください
手順としては
1.円形の描画範囲を設定する為の画面( マスク画面 )を MakeScreen で作成
2.マスク画面と合成する仮画面を MakeScreen で作成
3.マスク画面に対して円を描画
4.仮画面に描画範囲を円形にしたい画像を描画
5.裏画面に対して SetBlendGraphParam でマスク画面を合成する設定にした上で仮画面を描画
となります
画面の作成は負荷が大きいので、1と2はプログラムの最初で行い、
メインループでは3〜5を行います
上記の方法を使って実際に描画範囲を円形にして描画したかのような処理を行う
サンプルプログラムを組んでみましたので、よろしければご覧ください
( Test1.bmp を読み込み、円形の範囲にだけ画面に描画します
キーボードの方向キーで円の位置を移動できます )
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int MaskScreen ;
int TempScreen ;
int GrHandle ;
int x ;
int y ;
int i ;
// ウインドウモードで起動
ChangeWindowMode( TRUE ) ;
// DXライブラリの初期化
if( DxLib_Init() < 0 ) return -1 ;
// マスク用画面を作成
MaskScreen = MakeScreen( 640, 480, TRUE ) ;
// 仮画面を作成
TempScreen = MakeScreen( 640, 480, TRUE ) ;
// 乗算済みアルファ用画像設定で画像を読み込み
SetUsePremulAlphaConvertLoad( TRUE ) ;
GrHandle = LoadGraph( "Test1.bmp" ) ;
// 背景の色を灰色に設定
SetBackgroundColor( 128,128,128 ) ;
// メインループ(何かキーが押されたらループを抜ける)
x = 320 ;
y = 240 ;
while( ProcessMessage() == 0 )
{
// キー入力で移動
if( CheckHitKey( KEY_INPUT_LEFT ) ) x -= 8 ;
if( CheckHitKey( KEY_INPUT_RIGHT ) ) x += 8 ;
if( CheckHitKey( KEY_INPUT_UP ) ) y -= 8 ;
if( CheckHitKey( KEY_INPUT_DOWN ) ) y += 8 ;
// 描画先をマスク画面に変更
SetDrawScreen( MaskScreen ) ;
// 画面のクリア
ClearDrawScreen() ;
// 乗算済みアルファ用アルファブレンドモードに設定
SetDrawBlendMode( DX_BLENDMODE_PMA_ALPHA, 255 ) ;
// 円を描画
DrawCircle( x, y, 128, GetColor( 255,255,255 ), TRUE ) ;
// 描画先を仮画面に変更
SetDrawScreen( TempScreen ) ;
// 画面をクリア
ClearDrawScreen() ;
// 画像を描画
for( i = 0 ; i < 5 ; i ++ )
{
DrawGraph( 119 * i, 0, GrHandle, TRUE ) ;
}
// 描画先を裏画面に変更
SetDrawScreen( DX_SCREEN_BACK ) ;
// 画面をクリア
ClearDrawScreen() ;
// 合成画像としてマスク画面を設定
SetBlendGraphParam( MaskScreen, DX_BLENDGRAPHTYPE_ALPHA ) ;
// マスク画像と仮画面を合成して描画
DrawGraph( 0, 0, TempScreen, TRUE ) ;
// 合成の設定を解除
SetBlendGraphParam( -1, DX_BLENDGRAPHTYPE_ALPHA ) ;
// 裏画面の内容を表画面に反映
ScreenFlip() ;
}
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
なお、上記サンプルでも使用していますが、MakeScreen の第三引数に TRUE を渡して作成した
アルファチャンネル付きの画面を扱う場合、『乗算済みアルファ』というものを使用しないと
正常な描画結果が得られませんので、よろしければこちらの『乗算済みアルファ』についての解説をご覧ください m(_ _)m
http://homepage2.nifty.com/natupaji/DxLib/lecture/PremulAlpha/PremulAlpha.html