トップページ > 記事閲覧
バージョン3.24fの乗算済みα機能使用時の文字描画について
名前:さかな 日時: 2025/08/11 01:30

初めまして。 素晴らしいライブラリをご提供いただきありがとうございます。日々の開発で大変助かっております。 今回は、使用中に気づいた不具合らしきものについてご報告させていただきます。 * DXライブラリのバージョン: 3.24f * 開発環境: MSVC 2022 / C++23 / Windows 11 24H2 以下のコードを実行した際、グラフィックハンドルに乗算済みα用のαブレンドモードで透明度50%で文字を描画する処理部分において、 * アンチエイリアスが適用されない * フチを使用していない設定にもかかわらず、フチのような輪郭が出る (ただし「結果が分かりやすいように裏画面を緑で塗りつぶす」処理をコメントアウトするとフチは出ませんが、依然としてアンチエイリアスが適用されません) という挙動になります。 必要であればスクリーンショットの提供も可能です。 なお、同じコードをバージョン3.23fで実行した場合は、期待通りアンチエイリアス付きで描画され、フチのような輪郭も出ず、期待通りの描画になります。 お忙しいところ恐れ入りますが、ご確認いただければ幸いです。 今後ともライブラリの発展を楽しみにしております。 #include "DxLib.h" int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { int FontHandle; int ScreenHandle; ChangeWindowMode(true); SetUseCharCodeFormat(DX_CHARCODEFORMAT_UTF8); // DXライブラリ初期化処理 if (DxLib_Init() == -1) return -1; // 描画対象にできるαチャンネル付きのグラフィックハンドルを作成する ScreenHandle = MakeScreen(256, 64, TRUE); // 乗算済みα用のフォントハンドルを作成する SetFontCacheUsePremulAlphaFlag(TRUE); FontHandle = CreateFontToHandle(reinterpret_cast<const char*>(u8"MS ゴシック"), 32, 4, DX_FONTTYPE_ANTIALIASING_8X8, DX_CHARSET_UTF8); // 描画先を作成したグラフィックハンドルにする SetDrawScreen(ScreenHandle); // グラフィックハンドルに乗算済みα用のαブレンドモードで透明度50%で文字を描画する SetDrawBlendMode(DX_BLENDMODE_PMA_ALPHA, 128); DrawStringToHandle(0, 0, reinterpret_cast<const char*>(u8"テスト文章"), GetColor(255, 255, 255), FontHandle); // 描画先を裏画面に変更する SetDrawScreen(DX_SCREEN_BACK); // 結果が分かりやすいように裏画面を緑で塗りつぶす SetDrawBlendMode(DX_BLENDMODE_NOBLEND, 255); DrawBox(0, 0, 640, 480, GetColor(0, 200, 0), TRUE); // 裏画面に文字列を描画したグラフィックハンドルを乗算済みα用のαブレンドモードで描画する SetDrawBlendMode(DX_BLENDMODE_PMA_ALPHA, 255); DrawGraph(100, 100, ScreenHandle, TRUE); // 裏画面の内容を表画面に反映させる ScreenFlip(); // 作成したフォントハンドルを削除する DeleteFontToHandle(FontHandle); // MakeScreen で作成したグラフィックハンドルの削除 DeleteGraph(ScreenHandle); // キー入力待ち WaitKey(); // DXライブラリ使用の終了処理 DxLib_End(); // ソフトの終了 return 0; }
メンテ

Page: 1 |

Re: バージョン3.24fの乗算済みα機能使用時の文字描画について ( No.1 )
名前:管理人 日時:2025/08/11 23:10

再現用コードありがとうございます 去年行った別件の不具合の修正した際に本件のバグが発生してしまっていました 修正版をこちらにアップしましたので、よろしければお試しください m(_ _;m https://dxlib.xsrv.jp/temp/DxLibVCTest.zip // Windows版 VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.zip // Windows版 BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCC2Test.zip // Windows版 C++ Builder 10.2 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.zip // Windows版 MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // Windows版 .NET用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.zip // ソース (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』を、VCをお使いの場合は『リビルド』を、 Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい)
メンテ
Re: バージョン3.24fの乗算済みα機能使用時の文字描画について ( No.2 )
名前:さかな 日時:2025/08/12 01:12

ご対応いただきありがとうございます。 修正版を試したところ、描画の不具合が解消されたことを確認いたしました。 迅速なご対応に感謝申し上げます。 その一方で、修正版の使用中に気づいた新たな不具合らしきものについてご報告させていただきます。 * DXライブラリのバージョン: ご提供いただいた修正版 * 開発環境: MSVC 2022 / C++23 / Windows 11 24H2 「CreateDXFontData.exe」で作成した .dftファイル を使用して描画を行うと、特定の条件下で不具合が発生します。 再現手順: * CreateDXFontData.exe に /B4 オプションを渡して .dft ファイルを作成します。 * 作成した .dft ファイルからフォントハンドルを作成し、アルファ値が255、RGBがすべて255の完全な白色で文字を描画します。 期待される挙動: 完全な白色で文字が描画される。 実際の挙動: 描画された文字がわずかに半透明になってしまう。 備考: * CreateDXFontData.exe に /B4 以外のオプションを渡した場合や、CreateFontToHandle で DX_FONTTYPE_ANTIALIASING_4X4 を使用した場合は、期待通りの色で描画されます。 * MS ゴシック以外のフォントをいくつか試しましたが、結果は同様です。 繰り返しになってしまい恐縮ですが、ご確認いただければ幸いです。 * .dftファイル作成に使用したコマンド CreateDXFontData.exe /F"MS ゴシック" /B4 /S32 /CUTF8 /O"font_b4.dft" CreateDXFontData.exe /F"MS ゴシック" /B8 /S32 /CUTF8 /O"font_b8.dft" * 再現コード #include "DxLib.h" int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { int FontHandle; int ScreenHandle; ChangeWindowMode(true); SetUseCharCodeFormat(DX_CHARCODEFORMAT_UTF8); // DXライブラリ初期化処理 if (DxLib_Init() == -1) return -1; // 描画対象にできるαチャンネル付きのグラフィックハンドルを作成する ScreenHandle = MakeScreen(256, 256, TRUE); // 乗算済みα用のフォントハンドルを作成する SetFontCacheUsePremulAlphaFlag(TRUE); FontHandle = CreateFontToHandle( reinterpret_cast<const char*>(u8"MS ゴシック"), 32, -1, DX_FONTTYPE_ANTIALIASING_4X4, DX_CHARSET_UTF8); // 描画先を作成したグラフィックハンドルにする SetDrawScreen(ScreenHandle); const auto Text = reinterpret_cast<const char*>(u8"テスト文章"); const auto Color = GetColor(255, 255, 255); // グラフィックハンドルに乗算済みα用のαブレンドモードで透明度0%で文字を描画する SetDrawBlendMode(DX_BLENDMODE_PMA_ALPHA, 255); // CreateFontToHandle DX_FONTTYPE_ANTIALIASING_EDGE_4X4 * 問題なし * DrawStringFToHandle(0, 0, Text, Color, FontHandle); // CreateDXFontData.exe に /B4 を指定した.dftファイルで描画 * ここで描画に不具合 * const auto FontHandleDftB4 = LoadFontDataToHandle("font_b4.dft"); DrawStringFToHandle(0, 64, Text, Color, FontHandleDftB4); // CreateDXFontData.exe に /B8 を指定した.dftファイルで描画 * 問題なし * const auto FontHandleDftB8 = LoadFontDataToHandle("font_b8.dft"); DrawStringFToHandle(0, 128, Text, Color, FontHandleDftB8); // 描画先を裏画面に変更する SetDrawScreen(DX_SCREEN_BACK); // 結果が分かりやすいように裏画面を緑で塗りつぶす SetDrawBlendMode(DX_BLENDMODE_NOBLEND, 255); DrawBox(0, 0, 640, 480, GetColor(0, 200, 0), TRUE); // 裏画面に文字列を描画したグラフィックハンドルを乗算済みα用のαブレンドモードで描画する SetDrawBlendMode(DX_BLENDMODE_PMA_ALPHA, 255); DrawGraphF(100.f, 100.f, ScreenHandle, TRUE); // 裏画面の内容を表画面に反映させる ScreenFlip(); // 作成したフォントハンドルを削除する DeleteFontToHandle(FontHandle); // MakeScreen で作成したグラフィックハンドルの削除 DeleteGraph(ScreenHandle); // キー入力待ち WaitKey(); // DXライブラリ使用の終了処理 DxLib_End(); // ソフトの終了 return 0; }
メンテ
Re: バージョン3.24fの乗算済みα機能使用時の文字描画について ( No.3 )
名前:管理人 日時:2025/08/13 02:27

ご報告ありがとうございます 今週少し忙しく平日は作業時間が確保できそうにないので、週末に修正します 申し訳ありませんが数日程お待ちください m(_ _;m
メンテ
Re: バージョン3.24fの乗算済みα機能使用時の文字描画について ( No.4 )
名前:管理人 日時:2025/08/16 14:00

お待たせしました、/B4 オプションで作成したフォントデータが僅かに半透明に なってしまうバグを修正しましたので、よろしければこちらの修正版をお使いください m(_ _;m https://dxlib.xsrv.jp/temp/CreateDXFontDataTest_.zip ( CreateDXFontData.exe にバグがあり、/B4 オプションで作成されるフォントデータが 正常ではないものとなっていました… )
メンテ
Re: バージョン3.24fの乗算済みα機能使用時の文字描画について ( No.5 )
名前:さかな(解決済) 日時:2025/08/17 02:46

お世話になっております。 早速、修正版を試させていただきました。 ご報告させていただいた問題が解決し、正常に動作することを確認いたしました。 お忙しいところ迅速にご対応いただき、誠にありがとうございました。 今後ともよろしくお願いいたします。
メンテ

Page: 1 |

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

   クッキー保存