トップページ > 過去ログ > 記事閲覧
指定範囲内でのフィルタについて
名前:たまX 日時: 2012/05/27 01:55

みなさんはじめまして 大きさが変化する円の領域内のみにフィルタを掛けたいのですが 上手くいきません。わかる方、解決策を教えていただけませんか。 実現させようとしているプログラムです。 ----- //くり抜くための準備 SetDrawScreen(circleScreen); ClearDrawScreen(); DrawBox(0, 0, 640, 480, 0x000000, TRUE); //ゲーム画面の大きさで塗りつぶす DrawCircle(x, y, r, 0xffffff, TRUE); //この場所にフィルタを掛けたい //仮のスクリーンに乗算ブレンドで描画 SetDrawScreen(tempScreen); ClearDrawScreen(); DrawGraph(0, 0, mainScreen, TRUE); //今まで描画していたものを描画(背景とか) SetDrawBlendMode(DX_BLENDMODE_MULA, 255); DrawGraph(0, 0, circleScreen, TRUE); //背景が黒の円である画像を描画 SetDrawBlendMode(DX_BLENDMODE_NOBLEND, 0); //仮のスクリーンと合成して描画 GraphFilterBlt(tempScreen, tempScreen, DX_GRAPH_FILTER_GAUSS, 16, 1400); //仮のスクリーンをぼかす SetDrawScreen(mainScreen); //メインのスクリーンに戻す DrawGraph(0, 0, tempScreen, TRUE); //加工した画像を描画 ----- 上記のプログラムを実行すると、透過に利用した黒色が残ってしまいます。 黒がない状態で円の中をくり抜くようなことができると良いのですが... よろしくお願いします

Page: 1 |

Re: 指定範囲内でのフィルタについて ( No.1 )
名前:いっち 日時:2012/05/27 14:26

コード通りの結果が得られているだけに見えるので、 何をなさりたいのかいまいち分からないのですが、以下のような感じでしょうか? 違うようでしたら、コンパイル可能なコードと求める処理結果のイメージ画像をご提供下さい。 //- 以下、テストコード ("Scene1.jpg"を使用)-// #include "DxLib.h" int WINAPI WinMain( HINSTANCE, HINSTANCE, LPSTR, int ) { ChangeWindowMode( TRUE ); SetWindowText( "DxLib:" DXLIB_VERSION_STR ); if ( DxLib_Init( ) == -1 ) return -1; int white = GetColor( 255, 255, 255 ); int gh = LoadGraph( "Scene1.jpg" ); int circleScreen = MakeScreen( 640, 480, TRUE ); int tempScreen = MakeScreen( 640, 480, TRUE ); SetDrawScreen( DX_SCREEN_BACK ); while ( ProcessMessage( ) == 0 && CheckHitKey( KEY_INPUT_ESCAPE ) == 0 ) { SetDrawScreen(circleScreen); ClearDrawScreen(); // DrawBox(0, 0, 640, 480, GetColor( 0, 0, 0 ), TRUE); //ゲーム画面の大きさで塗りつぶす DrawCircle(640/2, 480/2, 480/2, GetColor( 255, 255, 255 ), TRUE); //この場所にフィルタを掛けたい //仮のスクリーンに乗算ブレンドで描画 SetDrawScreen(tempScreen); ClearDrawScreen(); DrawGraph(0, 0, gh, TRUE); //今まで描画していたものを描画(背景とか) SetDrawBlendMode(DX_BLENDMODE_MULA, 255); DrawGraph(0, 0, circleScreen, TRUE); //背景が黒の円である画像を描画 SetDrawBlendMode(DX_BLENDMODE_NOBLEND, 0); //仮のスクリーンと合成して描画 GraphFilterBlt(tempScreen, tempScreen, DX_GRAPH_FILTER_GAUSS, 16, 1400); //仮のスクリーンをぼかす SetDrawScreen(DX_SCREEN_BACK); //メインのスクリーンに戻す ClearDrawScreen( ); DrawGraph(0, 0, gh, TRUE); //今まで描画していたものを描画(背景とか) DrawGraph(0, 0, tempScreen, TRUE); //加工した画像を描画 DrawFormatString( 0, 0, white, "TEST" ); ScreenFlip( ); } DxLib_End( ); return 0; }
Re: 指定範囲内でのフィルタについて ( No.2 )
名前:たまX 日時:2012/05/27 20:09

いっち様 ありがとうございます。 作成したスクリーンが透過設定できているので、 黒で塗りつぶす必要がないのですね。解決しました。 SetDrawBlendMode(DX_BLENDMODE_MULA, 255); で円の画像を塗りつぶす際に画面の変化がない部分は 黒である必要があると思い込んでいました。 どうも失礼致しました。

Page: 1 |