トップページ > 記事閲覧
【要望】SetDrawAreaで円を指定したい
名前:dxマニア 日時: 2014/08/13 22:18

題名のとうりでSetDrawAreaで円の範囲を指定したいのですができますか。よろしくお願いします。
メンテ

Page: 1 |

Re: 【要望】SetDrawAreaで円を指定したい ( No.1 )
名前:dxマニア 日時:2014/08/13 22:32

わすれていました。 c#で開発中です。
メンテ
Re: 【要望】SetDrawAreaで円を指定したい ( No.2 )
名前:管理人 日時:2014/08/16 18:38

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
メンテ
Re: 【要望】SetDrawAreaで円を指定したい ( No.3 )
名前:dxマニア(解決) 日時:2014/08/16 20:21

ありがとうございました。
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存