トップページ > 記事閲覧
MakeScreenを使用すると画質が変化してしまう。
名前:Pika 日時: 2018/10/09 22:38

お世話になってます。 文字の描画に関して、MakeScreenで作成したスクリーンを挟むと画質が劣化(細くなって)してしまいます。 画像の拡大や縮小は行っておらず、等倍表示なのでMakeScreenを挟んでも全く同じ描画結果が得られると思っているのですが、 なにか劣化する要因があるのでしょうか? よろしくお願いします。 // 再現コード #include "DxLib.h" int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { SetWindowSize(640, 360); ChangeWindowMode(TRUE); if (DxLib_Init() == -1) // DXライブラリ初期化処理 { return -1; // エラーが起きたら直ちに終了 } int stringScreen = MakeScreen(400, 100, TRUE); int drawScreen = MakeScreen(250, 100, TRUE); int handle = CreateFontToHandle("MS ゴシック", 20, 2, DX_FONTTYPE_ANTIALIASING_EDGE_8X8); // 文字スクリーンに描画 SetDrawScreen(stringScreen); DrawFormatStringToHandle(0, 0, GetColor(255, 255, 255), handle, "%s", "ようこそ 世界"); // 文字スクリーンを描画用スクリーンにずらして描画 SetDrawScreen(drawScreen); DrawGraph(-30, 0, stringScreen, TRUE); // 裏画面に描画 SetDrawScreen(DX_SCREEN_BACK); DrawGraph(130, 100, drawScreen, TRUE); DrawFormatStringToHandle(100, 200, GetColor(255, 255, 255), handle, "%s", "ようこそ 世界"); // 比較用 ScreenFlip(); WaitKey(); // キー入力待ち DxLib_End(); // DXライブラリ使用の終了処理 return 0; // ソフトの終了 }
メンテ

Page: 1 |

Re: MakeScreenを使用すると画質が変化してしまう。 ( No.2 )
名前:Pika 日時:2018/10/10 01:48

コメントありがとうございます。 SetGraphModeでしたね。ありがとうございます。 後ろに画像等描画した上に文字描画するため、透過情報は保持しなければなりません。 透過情報が仮にあったとしてもアルファチャンネルありでMakeScreenしているので、 半透明な情報も当然保持されるものだと考えているのですが違うのでしょうか?
メンテ
Re: MakeScreenを使用すると画質が変化してしまう。 ( No.4 )
名前:Pika(解決) 日時:2018/10/11 01:06

下記のページの情報より解決しました。 ttp://dxlib.o.oo7.jp/lecture/PremulAlpha/PremulAlpha.html SetDrawBlendMode(DX_BLENDMODE_PMA_ALPHA, 255);をする必要があったようです。 ありがとうございました。
メンテ
Re: MakeScreenを使用すると画質が変化してしまう。 ( No.5 )
名前:管理人 日時:2018/10/11 03:01

既に『乗算済みアルファ』のページをご覧になっていただいたとのことで不要かもしれませんが、 一応私のほうでも Pikaさんのコードを『乗算済みアルファ』を使用した場合のものに変更してみました DX_BLENDMODE_PMA_ALPHA の他にフォントハンドルの場合は SetFontCacheUsePremulAlphaFlag( TRUE ); も 使用する必要がありますのでご注意ください m(_ _)m #include "DxLib.h" int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { SetGraphMode(640, 360, 32); // まず、画面サイズ(バックバッファ)設定はこれを使いましょう ChangeWindowMode(TRUE); if (DxLib_Init() == -1) // DXライブラリ初期化処理 return -1; // エラーが起きたら直ちに終了 int stringScreen = MakeScreen(400, 100, TRUE); int drawScreen = MakeScreen(250, 100, TRUE); // 乗算済みアルファのフォントハンドルを作成する指定を行う SetFontCacheUsePremulAlphaFlag( TRUE ); int handle = CreateFontToHandle("MS ゴシック", 20, 2, DX_FONTTYPE_ANTIALIASING_EDGE_8X8); // 文字スクリーンに描画 SetDrawScreen(stringScreen); ClearDrawScreen(); // 乗算済みアルファ用アルファブレンドのブレンドモードに設定する SetDrawBlendMode( DX_BLENDMODE_PMA_ALPHA, 255 ); DrawFormatStringToHandle(0, 0, GetColor(255, 255, 255), handle, "%s", "ようこそ 世界"); // 文字スクリーンを描画用スクリーンにずらして描画 SetDrawScreen(drawScreen); ClearDrawScreen(); // 乗算済みアルファ用アルファブレンドのブレンドモードに設定する SetDrawBlendMode( DX_BLENDMODE_PMA_ALPHA, 255 ); DrawGraph(-30, 0, stringScreen, TRUE); // 裏画面に描画 SetDrawScreen(DX_SCREEN_BACK); // 描画結果が分かりやすいように裏画面をグレーでクリアする DrawBox( 0, 0, 640, 360, GetColor( 128,128,128 ), TRUE ); // 乗算済みアルファ用アルファブレンドのブレンドモードに設定する SetDrawBlendMode( DX_BLENDMODE_PMA_ALPHA, 255 ); DrawGraph(130, 100, drawScreen, TRUE); DrawFormatStringToHandle(100, 200, GetColor(255, 255, 255), handle, "%s", "ようこそ 世界"); // 比較用 ScreenFlip(); WaitKey(); // キー入力待ち DxLib_End(); // DXライブラリ使用の終了処理 return 0; // ソフトの終了 }
メンテ
Re: MakeScreenを使用すると画質が変化してしまう。 ( No.6 )
名前:Pika(解決) 日時:2018/10/12 01:57

返信ありがとうございます。 ご指摘の通り、SetFontCacheUsePremulAlphaFlag( TRUE );の設定が抜けていました。 非常に助かりました。 ありがとうございました。
メンテ

Page: 1 |

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

   クッキー保存