投稿者 るきお  (社会人) 投稿日時 2021/10/3 18:58:01
おっしゃっていることが理解できてきました。
まだ完全ではありません。

文字がフォントに含まれるかどうかは、GlyphTypeface.CharacterToGlyphMap.TryGetValue で判断できます。(判断するだけならContainsKeyの方が簡単です。)


var gtf = new GlyphTypeface(new Uri(@"C:\temp\ipamjm.ttf"));
//var gtf = new GlyphTypeface(new Uri(@"C:\temp\verdana.ttf"));


var b = System.Text.Encoding.UTF32.GetBytes("𩸽");
var codePoint = b[0] + b[1] * 256 + b[2] * 256 * 256 + b[3] * 256 * 256 * 256;

ushort index;
if (gtf.CharacterToGlyphMap.TryGetValue(codePoint, out index))
{
    Console.WriteLine($"このフォントでは インデックス {index} にその文字があります。");
}
else
{
    Console.WriteLine("このフォントにはその文字は含まれていません。");
}


このコンソールアプリケーションを実行するにはプロジェクトファイルの<PropertyGroup>内に<UserWPF>true</UserWPF>を追加する必要があります。面倒ならConsoleの部分をMessageBoxなどに変更すればWPFプロジェクトでも実行できます。

これを ipamjm.ttf で実施すると 55556 を取得し、verdana.ttf でやると文字は含まれていませんと表示されます。

このプログラムでは、まだsnowmansnowさんの知りたいことがわからないのだと思いますが、何か足りないのでしょうか?

>ユニコードで表現される?文字のグリフが、あるフォントに存在するか知りたいです。
これは達成できていると思うのですが…。


>IPAmj明朝で𩸽は、コードポイント171581ですが、取得できるグリフ番号は、55556ですが、
>グリフは、55555、55556、55557の3つです。
>55555、55557を検索、取得できる方法がわかりません。
と以前、書かれているので、何かこのあたりのことはすでに実験済みのように感じました。

いろいろ書きたいのですが、あまり時間が割けずひとまずこのあたりで送信します。