トップページ > 過去ログ > 記事閲覧
画像をグラデーション透過して描画したいのですが
名前:shin 日時: 2011/03/06 00:37

はじめまして。最近プログラミングの勉強を始めて、ゲーム制作をしようとしているshinというものです。 少々行き詰まったので質問させてください。 マスクのような処理を用いて、画像を徐々に透過して描画することは可能でしょうか? 例えば、DXライブラリのマスク関係関数で、灰色部分も半透明の透過情報として認識するようなイメージです。 また、可能な場合、具体的にはどのような処理が必要でしょうか? ご教授いただけると幸いです。

Page: 1 |

Re: 画像をグラデーション透過して描画したいのですが ( No.1 )
名前:いっち 日時:2011/03/06 20:24

画像Aと画像Bを時間経過で徐々に切り替えていくようなイメージでしたら DrawBlendGraph が適当だと思います。
Re: 画像をグラデーション透過して描画したいのですが ( No.2 )
名前:shin 日時:2011/03/06 23:08

いっちさん、返信ありがとうございます。 説明が分かりづらかったようなので補足いたします。申し訳ございません。 表現したい効果は、時間経過による透過ではなく、画面の指定範囲の透過です。 以下に参考画像を用意しました。 ttp://www1.axfc.net/uploader/Img/so/109807 DLkey:1234 (72時間で消えます) なぜこのような効果を表現したいかというと、背景やマスクの座標を変更せず、 画像の座標を1フレームごとに変更してマスク上を移動するようなアニメーションを表現したいからです。 (マスクで透過指定した部分に画像が来た場合はその部分を透過) DrawBlendGraph ですと、画像の座標を変更したとき、マスクの座標も一緒に変更されてしまって、目的であるマスク上の移動が再現できませんでした。 なので、なんとか目的を達成できないかと質問させていただきました。
Re: 画像をグラデーション透過して描画したいのですが ( No.3 )
名前:クラスクラス 日時:2011/03/07 00:36

ヘッダーをぱっと見た感じでは。 extern int DrawBlendGraphPos( int x, int y, int GrHandle, int TransFlag, int bx, int by, int BlendGraph, int BorderParam, int BorderRange ) ; // ブレンド画像と合成して画像を描画する( ブレンド画像の起点座標を指定する版 ) の非公開関数がありましたが、たぶん目的のことは難しいと思われます。 メニューなら、それほどスピードが要らないので、私ならソフトイメージの編集で処理すると考えます。
Re: 画像をグラデーション透過して描画したいのですが ( No.4 )
名前:shin(解決) 日時:2011/03/07 19:06

なるほど。DrawBlendGraphPosなら目的に近いことは表現できそうです。 ソフトイメージの編集と合わせて色々と試しつつ、妥協点をさがしたいと思います。 ありがとうございました。
Re: 画像をグラデーション透過して描画したいのですが ( No.5 )
名前:いっち(解決) 日時:2011/03/07 20:58

解決とされているので今更ですが、せっかく実験してみたので載せておきます。 DrawBlendGraph でやってみました。 テストコードで使用した画像です。 > ://www1.axfc.net/uploader/Sc/so/212330.zip&key=dxlib 結果としては blend.jpg のグラデーション具合を変えたり DrawBlendGraph のパラメータを調整すればうまくいきそうでした。 ただ、速度的には背景とメニューを普通に描画して、その上に背景と調和の取れた枠を上書きするほうが有利かもしれません。 //- 以下、テストコード ("blend.jpg"と"back.PNG"を使用) -// //- 画像は100x200。blend.jpg は白から黒へグラデーションする画像。back.png何でも可 #include "DxLib.h" int WINAPI WinMain( HINSTANCE, HINSTANCE, LPSTR, int ) { ChangeWindowMode( TRUE ); if ( DxLib_Init( ) == -1 ) return -1; int StrColor = GetColor( 255, 255, 255 ); SetDrawValidAlphaChannelGraphCreateFlag( TRUE ); int GH_Menu = MakeScreen( 100, 200 ); SetDrawValidAlphaChannelGraphCreateFlag( FALSE ); int GH_Blend = LoadBlendGraph( "blend.jpg" ); int GH_Back = LoadGraph( "back.PNG" ); SetDrawScreen( GH_Menu ); for ( int i = 0; i < 10; i++ ) DrawFormatString( 0, i * 20, StrColor, "ITEM %d", i ); SetDrawScreen( DX_SCREEN_BACK ); while ( ProcessMessage( ) == 0 && CheckHitKey( KEY_INPUT_ESCAPE ) == 0 ) { ClearDrawScreen( ); DrawGraph( 0, 0, GH_Back, FALSE ); DrawBlendGraph( 0, 0, GH_Menu, TRUE, GH_Blend, 96, 128 ) ; ScreenFlip( ); } DxLib_End( ); return 0; }
Re: 画像をグラデーション透過して描画したいのですが ( No.6 )
名前:shin(解決) 日時:2011/03/07 21:58

わざわざありがとうございます。 MakeScreenは盲点でした。 マスクでの透過位置や透過度の指定ができないのは残念ですが、速度の犠牲と他の関数との組み合わせによっては目的の完全再現ができそうです。 >速度的には背景とメニューを普通に描画して、その上に背景と調和の取れた枠を上書きするほうが有利かもしれません。 それも考えていましたが、背景に簡単なスクロールするようなアニメーションをつけたり、 映像のアンチエイリアシングも似たような処理で行えないか視野に入れており、 描画する画像そのものを透過できたほうが便利だと思い、候補から外していました。 最悪、背景にアニメーションをつける案を破棄する覚悟もありましたが。 非公開関数の中にも使えそうなものがあるようですね。 色々と調べてみます。

Page: 1 |