トップページ > 記事閲覧
CreateFontToHandleのエッジについて
名前:gmo 日時: 2017/09/07 21:11

お世話になってます。 CreateFontToHandleについて、FontTypeにDX_FONTTYPE_NORMALを設定した場合でも CreateFontToHandle(NULL, 12, 3, DX_FONTTYPE_NORMAL, -1, 2) のようにEdgeSizeを設定するとエッジ付きのハンドルが出来上がるようです。 掲示板の「CreateFontToHandleについて質問」(h・ttp://dxlib.o.oo7.jp/cgi/patiobbs/patio.cgi?mode=view&no=4155) でのやり取りを見る限りでは意図してない挙動のように思えたので報告させていただきます。 ライブラリのバージョンは3.18eです。
メンテ

Page: 1 |

Re: CreateFontToHandleのエッジについて ( No.1 )
名前:管理人 日時:2017/09/09 16:43

ご報告ありがとうございます CreateFontToHandle のプログラムを確認してみたところ EdgeSize が 2 以上だった場合は自動的に 縁ありタイプに変更するようになっていました 条件が『EdgeSize が 1 以上』であれば現在の処理のままで良いかな?とも思ったのですが、『EdgeSize が 2以上』という 微妙な条件なので、処理を『縁無しタイプの場合は EdgeSize の値を無視する』に変更しました もしご必要でしたらその変更を施したバージョンをお使いください m(_ _)m https://dxlib.xsrv.jp/temp/DxLibVCTest.exe // Windows版 VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.exe // Windows版 BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCC2Test.exe // Windows版 C++ Builder 10.1 Berlin 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.exe // Windows版 MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // Windows版 .NET用 https://dxlib.xsrv.jp/temp/DxLibAndroidTest_ARM.exe // Android版 ARM用 https://dxlib.xsrv.jp/temp/DxLibAndroidTest_x86.exe // Android版 x86用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.exe // ソース ( 中身を既存のライブラリのファイルに上書きして、VisualStudioをお使いの場合は『リビルド』を、  BCCをお使いの場合は『再構築』をして下さい )
メンテ
Re: CreateFontToHandleのエッジについて ( No.2 )
名前:gmo 日時:2017/09/10 19:08

テストバージョンの動作させ、CreateFontToHandleのFontTypeにてエッジ指定がない場合のEdgeSize値無効を確認しました。 > 条件が『EdgeSize が 1 以上』であれば現在の処理のままで良いかな?とも思ったのですが、『EdgeSize が 2以上』という > 微妙な条件なので、処理を『縁無しタイプの場合は EdgeSize の値を無視する』に変更しました 最初に不具合かも?と報告しておいてなんなんですが、「EdgeSizeの条件を1以上にする」という修正は影響が大きくなってしまうでしょうか? というのも、EdgeSizeでエッジの有無が制御できるなら、FontTypeはAA設定専用として扱えそうだと思ったので・・・
メンテ
Re: CreateFontToHandleのエッジについて ( No.3 )
名前:管理人 日時:2017/09/10 23:08

> 最初に不具合かも?と報告しておいてなんなんですが、「EdgeSizeの条件を1以上にする」という修正は影響が大きくなってしまうでしょうか? 影響は小さく変更も容易ですが、やはり DX_FONTTYPE_NORMAL 等の縁なしを指定しているのに EdgeSize に 1 以上を 指定すると縁が付いてしまうというのは変だと思います… > というのも、EdgeSizeでエッジの有無が制御できるなら、FontTypeはAA設定専用として扱えそうだと思ったので・・・ 縁がつくかどうかやアンチエイリアスにするかどうかは値のビットが立っているかどうかで判断しているので、 縁をつける場合は FontType に DX_FONTTYPE_EDGE を or演算で加えて、アンチエイリアス付きにする場合は DX_FONTTYPE_ANTIALIASING を or演算で加える、といった処理を組めば多少綺麗に書けると思います 何のビットも立っていない = 縁無しアンチエイリアス無しフォント( DX_FONTTYPE_NORMAL ) 1ビット目が立っている = 縁ありフォント( DX_FONTTYPE_EDGE ) 2ビット目が立っている = アンチエイリアス付きフォント( DX_FONTTYPE_ANTIALIASING ) 2ビット目と5ビット目が立っている = 4x4サンプリングアンチエイリアス付きフォント( DX_FONTTYPE_ANTIALIASING_4X4 ) 2ビット目と6ビット目が立っている = 8x8サンプリングアンチエイリアス付きフォント( DX_FONTTYPE_ANTIALIASING_8X8 )
メンテ
Re: CreateFontToHandleのエッジについて ( No.4 )
名前:gmo(解決) 日時:2017/09/11 19:54

アドバイスありがとうございます。現在CreateFontToHandleのラップ関数をつくっていて、 その中で呼び出されるCreateFontToHandleのFontTypeの設定はビット演算で行っております。 ちなみに、今回報告した事象はそれのテスト中に見つけたものでした。 そのラップ関数の作成動機の一つに、エッジとAAを分けて設定したいというのがあって それ故、変な質問をしてしまいました。失礼しました。 対応と回答ありがとうございました。
メンテ

Page: 1 |

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

   クッキー保存