makescreenの透過

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
スケルトン

makescreenの透過

#1

投稿記事 by スケルトン » 11年前

下記のようなプログラムを書いたのですが黒い部分が透明になりません。
どうすればいいでしょうか

コード:

#include "DxLib.h"

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
	int handle;
	double i = 1;
	// ウインドウモードで起動
	ChangeWindowMode(TRUE);
	SetBackgroundColor(0,255,0);
	// DXライブラリの初期化
	if (DxLib_Init() < 0) return -1;
	
	//アルファチャンネルなしの描画可能画像を作成する
	handle = MakeScreen(200, 200, true);

	// 作成した画像を描画対象にする
	SetDrawScreen(handle);
	
	DrawCircle(100, 100, 50, GetColor(255,255,0), 0);
	DrawBox(0, 100, 200, 200, GetColor(0,0,0), TRUE);

	// 描画対象を表画面にする
	SetDrawScreen(DX_SCREEN_BACK);
	SetTransColor(0,0,0);
	while (ProcessMessage() == 0)
	{
		i+=0.05;
                ClearDrawScreen();
		DrawCircle(100, 100, 50, GetColor(255, 255, 0), 0);
		DrawRotaGraph(100, 100, 1, i, handle, 1, 0);
		ScreenFlip();

	}
	// DXライブラリの後始末
	DxLib_End();

	// ソフトの終了
	return 0;
}

アバター
h2so5
副管理人
記事: 2212
登録日時: 14年前
住所: 東京
連絡を取る:

Re: makescreenの透過

#2

投稿記事 by h2so5 » 11年前

コメントとコードの意味が真逆ですが...

コード:

    //アルファチャンネルなしの描画可能画像を作成する
    handle = MakeScreen(200, 200, true);

スケルトン

Re: makescreenの透過

#3

投稿記事 by スケルトン » 11年前

書き間違えました。

スケルトン

Re: makescreenの透過

#4

投稿記事 by スケルトン » 11年前

画像のような状態になってしまいます。
画像

ISLe
記事: 2650
登録日時: 14年前
連絡を取る:

Re: makescreenの透過

#5

投稿記事 by ISLe » 11年前

SetTransColorは、それ以降に作成されるグラフィックハンドルに対して有効です。
そもそも、アルファチャンネルを持つ画像は透過色を無視します。

MakeScreenで作成したアルファチャンネル付きグラフィックに対して、アルファチャンネルのみを対象とした操作はできないようですが、透明にしたい部分に対してSetDrawBlendMode関数のDX_BLENDMODE_SUBを指定しておいて描画することでアルファ値を削ることができます。

アバター
spaaaark・∀・
記事: 66
登録日時: 12年前
住所: 埼玉
連絡を取る:

Re: makescreenの透過

#6

投稿記事 by spaaaark・∀・ » 11年前

オフトピック
ISLe さんが書きました:MakeScreenで作成したアルファチャンネル付きグラフィックに対して、アルファチャンネルのみを対象とした操作はできないようですが、透明にしたい部分に対してSetDrawBlendMode関数のDX_BLENDMODE_SUBを指定しておいて描画することでアルファ値を削ることができます。
僕の意味の取り違いが怖いのですが、とりあえず参考までにこちらのリンクを貼っておきます…。
クリエイティブな生活で刺激的な毎日を!

ISLe
記事: 2650
登録日時: 14年前
連絡を取る:

Re: makescreenの透過

#7

投稿記事 by ISLe » 11年前

MakeScreenで作成したアルファチャンネル付きグラフィックに対して、SetDrawBlendMode関数のDX_BLENDMODE_ALPHAを使って半透明で描画すると、アルファ値だけでなく、RGB各要素も指定した割合で合成されます。
そのため、半透明を含むMakeScreenで作成したアルファチャンネル付きグラフィックを他の画面に描画する際には、乗算済みアルファとして扱う必要があります。

あとから透明にしたい部分にSetDrawBlendMode関数のDX_BLENDMODE_ALPHAを使って100%透明で描いてもアルファ値は変化しません。
RGBも変化しないので何も変わりません。

SetDrawBlendMode関数のDX_BLENDMODE_SUBを指定しておいてR:G:B=0:0:0(黒)で描画すると、RGB要素は変化しませんが、アルファ値だけが指定した分だけ減って透明に近付きます。
逆にDX_BLENDMODE_ADDを指定しておいてR:G:B=0:0:0(黒)で描画すると、元から描いてある画像が浮かび上がってきます。

閉鎖

“C言語何でも質問掲示板” へ戻る