トップページ > 記事閲覧
MakeScreenを経由すると半透明画像が薄くなる
名前:Karaage 日時: 2022/03/17 13:35

お世話になっております。 c#にて、MakeScreenで作成したスクリーンに半透明のpng画像を描画したものをウィンドウに描画すると元の画像よりも透明度が高くなってしまい困っています。 MakeScreenを通しても元画像の透明度を維持したいのですが可能でしょうか? 本現象は下記のコードで再現できます。 コードで使っている画像(img.png)はこちらです。→ ttps://ux.nu/UMxg8 global using static DxLibDLL.DX; namespace Program { internal class Program { static void Main() { SetGraphMode(900, 600, 32); ChangeWindowMode(TRUE); DxLib_Init(); var img = LoadGraph("img.png"); //半透明画像 //アルファチャンネル付きスクリーン var tmpSCR = MakeScreen(300, 300, TRUE); SetDrawScreen(tmpSCR); DrawGraph(0, 0, img, TRUE); //アルファチャンネル付きスクリーン2 var tmpSCR2 = MakeScreen(300, 300, TRUE); SetDrawScreen(tmpSCR2); DrawGraph(0, 0, tmpSCR, TRUE); SetDrawScreen(DX_SCREEN_BACK); DrawBox(0, 0, 900, 600, GetColor(255, 255, 255), TRUE); //見やすいように白背景にする DrawGraph(0, 0, img, TRUE); //元画像を直で描画 DrawGraph(300, 0, tmpSCR, TRUE); //1枚のスクリーン経由で描画 DrawGraph(600, 0, tmpSCR2, TRUE); //2枚のスクリーン経由で描画 ScreenFlip(); WaitKey(); } } }
メンテ

Page: 1 |

Re: MakeScreenを経由すると半透明画像が薄くなる ( No.1 )
名前:たろう 日時:2022/03/17 22:35

MakeScreenで作った画像に半透明の画像を貼る場合は、 「乗算済みアルファ」を使う必要があります。 具体的には、SetUsePremulAlphaConvertLoadと、 文字を描くのならSetFontCacheUsePremulAlphaFlagも必要になると思います 詳しくは以下に説明があります <乗算済みアルファのすすめ> ttps://dxlib.xsrv.jp/lecture/PremulAlpha/PremulAlpha.html ・・・見当違いでしたらごめんなさい<(_ _)>
メンテ
Re: MakeScreenを経由すると半透明画像が薄くなる ( No.2 )
名前:Karaage(解決) 日時:2022/03/18 00:46

> たろう さん ご回答ありがとうございます。 「乗算済みアルファ」なるものがあったのですね。知りませんでした。 <乗算済みアルファのすすめ>を参考にしたところ、解決しました!
メンテ

Page: 1 |

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

   クッキー保存