代替フォントを避けてフォントの字体を確認する2018年10月11日 16:58

字体を確認するツールを作っているが、フォントが用意していない文字コードを指定すると代替フォントが表示され、混乱する。

代替フォントが表示された後、XAMLのFontFamilyを確認するも、指定したFontFamilyの値を返すばかりで、代替フォントであるかどうかの判別はできない。

探してみると、Win2DでCanvasFontFaceを取得すると、そこからUnicodeRanges属性が得られ、フォントが定義されているかどうか判別できそう。

CanvasFontFaceの取得

59行;システムで利用可能なフォント一覧の取得。
60行;フォント一覧のCanvasFontFaceの取得。
89行;UnicodeRangesの取得。

UnicodeRangesは、FirstとLastのペアの配列。First~Lastの範囲でフォントが定義されていることを示す。

UnicodeRangesの確認

行176;与えられたUnicodeについて、UnicodeRangesで定義された範囲内かどうかを判別。効率が悪いやり方なのはご容赦。
行170;与えられたUnicodeについて、UnicodeGeneralCategoryを取得し、未設定や記号を排除しているが、代替フォントがある場合は排除できない。ちなみに、漢字はOther Letterになる。

実際に文字を表示して確認

実際にツールを動かしてみたところ。「丙」の文字。U+4E14からU+4E19の範囲内にあり、フォントが定義されている。次は、U+4E1Eに飛ぶ。この範囲だが、かなり細切れ。UnicodeRanges配列の要素はかなり多い。

これで、ゴシックを表示していたら明朝が混じる、といったことを防ぐことができる。これで、ようやくWindowsアクセサリの「文字コード表」と同じところ。

コメント

コメントをどうぞ

※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。

※なお、送られたコメントはブログの管理者が確認するまで公開されません。

名前:
メールアドレス:
URL:
コメント:

トラックバック

このエントリのトラックバックURL: http://c5d5e5.asablo.jp/blog/2018/10/11/8971340/tb

※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。