トップページ > 過去ログ > 記事閲覧
SetTransColorで透過できない
名前:masa 日時: 2012/06/02 09:16

SetTransColorで指定した色で望んだグラフィックの一部を透過色で塗りつぶしたいのですが、どうにもうまくいきません。 以下のようなコードなのですがSetTransColorの使い方を間違っているのでしょうか? #include "all.h" int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { if(ChangeWindowMode(TRUE) != 0) { return -1; } if(DxLib_Init() != 0) { return -1; } if(SetDrawScreen(DX_SCREEN_BACK) != 0) { DxLib_End(); return -1; } SetBackgroundColor(220, 220, 220); int handle, handle2; int color; //色の取得 color = GetColor(255, 0, 255); //透過色の指定 SetTransColor(255, 0 , 255) ; //画像の読み込み handle = LoadGraph("pic/フィールド1.png", true); //描画対象にできるグラフィックの取得 handle2 = MakeScreen(640, 480, true); //描画対象をhandle2へ SetDrawScreen(handle2); //ロードしておいた画像をhandle2にコピー DrawGraph(0, 0, handle, true); //透過色で指定された色で円状に塗りつぶす(SetBackgroundColorで指定した色が塗りつぶしたところにでる予定) DrawCircle(320, 320, 50, color, true); SetDrawScreen(DX_SCREEN_BACK); DrawGraph(0,0,handle2,TRUE); ScreenFlip(); WaitKey(); DxLib_End(); return 0; } 出力結果は読み込んだ画像の上に、透過色で指定した色が透過されないまま表示されています。 背景の上に画像を重ねてその画像を円や四角形でくりぬき、下にある背景が見えるという状態になることを望んでいるのですが、 もし僕の勘違いでこのような方法では望んでいた結果が得られない場合、どのような手段なら実現できるか教えていただけたらと思います。 よろしくおねがいします。 ちなみに、SetTransColorで指定された色を含むpngファイルをこのコードの中に適当に含めたところ、その画像の透過されるべき部分も 透過されませんでした。解決の一助になれば。

Page: 1 |

Re: SetTransColorで透過できない ( No.1 )
名前:Will 日時:2012/06/02 11:40

PNG形式ファイルは、それ自体に透過設定できますからSetTransColorの影響を受けないようになっているのではないでしょうか? グラッフィックツールで画像ファイル自体に透過設定を行なってください。 もしくは、BMP形式を使用してください。
Re: SetTransColorで透過できない ( No.2 )
名前:masa 日時:2012/06/03 13:27

回答ありがとうございます。 処理の位置を変えたりBMP形式にしたり何パターンか試しましたがダメでした。どうやら描画可能なグラフィックに対する 透過処理は仕様上不可みたいですね。 その後、SetDrawBlendModeを使ってなんとか画像を透けさせられないか試したところ以下のコードで望ん だ通りの処理を行うことに成功しました! //描画可能のグラフィックを円で塗りつぶし、透過し背景を表示する #include "all.h" int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { if(ChangeWindowMode(TRUE) != 0) { return -1; } if(DxLib_Init() != 0) { return -1; } if(SetDrawScreen(DX_SCREEN_BACK) != 0) { DxLib_End(); return -1; } SetBackgroundColor(220, 220, 220); SetGraphMode(960, 540, 16); int handle, handle2, hYobi; //画像の読み込み handle = LoadGraph("pic/フィールド1.png", true); hYobi = LoadGraph("pic/背景.png", true); //描画対象にできるグラフィックの取得 handle2 = MakeScreen(960, 540, true); //描画対象をhandle2へ SetDrawScreen(handle2); //ロードしておいた画像をhandle2にコピー DrawGraph(0, 0, handle, true); SetDrawBlendMode( DX_BLENDMODE_MUL, 0 ); //アルファ値ゼロで乗算 DrawCircle(5, 325, 50, GetColor(255, 255, 255), true); SetDrawBlendMode( DX_BLENDMODE_NOBLEND, 255 ); SetDrawScreen(DX_SCREEN_BACK); DrawGraph(0, 0, hYobi, TRUE); DrawGraph(0,0,handle2,TRUE); ScreenFlip(); WaitKey(); DxLib_End(); return 0; } これでフィールド1という画像を円でくりぬいて、後ろに張り付けてある背景を表示することができました。 (ちなみに、はじめ背景.pngを使わずにSetBackgroundColorで設定した背景色を表示しようとしたところ、こちらは 設定した色がうまく表示されず失敗に終わりました。) おかげさまで次のステップへ進めそうです。ありがとうございました。
Re: SetTransColorで透過できない ( No.3 )
名前:管理人 日時:2012/06/03 19:11

すみません、現在の SetTransColor は画像を読み込む際に SetTransColor で 指定された色が不透明度0%( つまり完全に透明 )に変換されるだけで、 後から画像に描画されたピクセルの色に対しては SetTransColor の設定は効果がありません リファレンスの説明も現在の仕様に合うように変更しました

Page: 1 |