ヘッダー
C# サンプル集
 

フォントに指定した文字が収録されているか確認する

2022/10/16

→ Visual Basic のサンプルに切り替える → Python のサンプルに切り替える

 

文字「桜」がフォント「メイリオ」に収録されているか調べる

int codePoint = "桜".EnumerateRunes().First().Value;
//int codePoint = 0x685C; //Unicodeでのコードポイントを直接指定することもできます。

//フォント名の例 "メイリオ", "Meiryo", "MS Mincho" ,"MS 明朝", "Arial", "Segoe UI Emoji"
string fontName = "メイリオ"; 

var typeFace = new System.Windows.Media.Typeface(fontName);
System.Windows.Media.GlyphTypeface? gtf = null;

//複合フォントの場合は、ここで取得に失敗します。
//Global User Interface, Global Monospace, Global Sans Serif, Global Serif は複合フォントです。
//https://learn.microsoft.com/ja-jp/dotnet/api/system.windows.media.fontfamily?view=windowsdesktop-6.0#composite-fonts
if (typeFace.TryGetGlyphTypeface(out gtf) == false)
{
    System.Diagnostics.Debug.WriteLine($"{fontName} は複合フォントのため判断できませんでした。");
    return;
}

string letter = char.ConvertFromUtf32(codePoint);
if (gtf.CharacterToGlyphMap.ContainsKey(codePoint))
{
    //出力例 メイリオ に 桜 (0685C) は収録されています。
    System.Diagnostics.Debug.WriteLine($"{fontName}  {letter} ({codePoint:X5}) は収録されています。");
}
else
{
    //出力例 Arial に 桜(0685C) は収録されていません。
    System.Diagnostics.Debug.WriteLine($"{fontName}  {letter} ({codePoint:X5}) は収録されていません。");
}

Debug.WriteLineが表示される場所

メモ:Windows フォームアプリ や コンソールアプリ や ASP.NET Core Webアプリなどでこのプログラムを実行するにはWPFアプリの有効化が必要です。 その方法 → WPFの機能を有効にする

 

 

文字「桜」がフォントファイル「meiryo.ttc」に収録されているか調べる

int codePoint = "桜".EnumerateRunes().First().Value;
//int codePoint = 0x685C; //Unicodeでのコードポイントを直接指定することもできます。

// フォントファイル名の例 "meiryo.ttc", "arial.ttf"
string fontFileName = @"C:\Windows\Fonts\meiryo.ttc";

var gtf = new System.Windows.Media.GlyphTypeface(new Uri(fontFileName));

string letter = char.ConvertFromUtf32(codePoint);
if (gtf.CharacterToGlyphMap.ContainsKey(codePoint))
{
    //出力例 C:\Windows\Fonts\meiryo.ttc に 桜 (0685C) は収録されています。
    System.Diagnostics.Debug.WriteLine($"{fontFileName}  {letter} ({codePoint:X5}) は収録されています。");
}
else
{
    //出力例 C:\Windows\Fonts\meiryo.ttc に 桜(0685C) は収録されていません。
    System.Diagnostics.Debug.WriteLine($"{fontFileName}  {letter} ({codePoint:X5}) は収録されていません。");
}

Debug.WriteLineが表示される場所

メモ:Windows フォームアプリ や コンソールアプリ や ASP.NET Core Webアプリなどでこのプログラムを実行するにはWPFアプリの有効化が必要です。 その方法 → WPFの機能を有効にする

メモ:既定のフォントのディレクトリーは System.Environment.GetFolderPath(Environment.SpecialFolder.Fonts) で取得できます。

 

 

古代エジプトの象形文字(ヒエログリグ)がフォント「Segoe UI Historic」に収録されているか調べる

int codePoint = 0x13000; //Unicodeで定義されているヒエログリフの1文字目

//フォント名の例 "メイリオ", "Meiryo", "MS Mincho" ,"MS 明朝", "Arial", "Segoe UI Emoji"
string fontName = "Segoe UI Historic"; 

var typeFace = new System.Windows.Media.Typeface(fontName);
System.Windows.Media.GlyphTypeface? gtf = null;

//複合フォントの場合は、ここで取得に失敗します。
//Global User Interface, Global Monospace, Global Sans Serif, Global Serif は複合フォントです。
//https://learn.microsoft.com/ja-jp/dotnet/api/system.windows.media.fontfamily?view=windowsdesktop-6.0#composite-fonts
if (typeFace.TryGetGlyphTypeface(out gtf) == false)
{
    System.Diagnostics.Debug.WriteLine($"{fontName} は複合フォントのため判断できませんでした。");
    return;
}

string letter = char.ConvertFromUtf32(codePoint);
if (gtf.CharacterToGlyphMap.ContainsKey(codePoint))
{
    //出力例 Segoe UI Historic に 𓀀 (13000) は収録されています。 ← この例ではこれが表示されます。
    System.Diagnostics.Debug.WriteLine($"{fontName}  {letter} ({codePoint:X5}) は収録されています。");
}
else
{
    //出力例 Segoe UI Historic に 𓀀 (13000) は収録されていません。
    System.Diagnostics.Debug.WriteLine($"{fontName}  {letter} ({codePoint:X5}) は収録されていません。");
}

Debug.WriteLineが表示される場所

メモ:Windows フォームアプリ や コンソールアプリ や ASP.NET Core Webアプリなどでこのプログラムを実行するにはWPFアプリの有効化が必要です。 その方法 → WPFの機能を有効にする

メモ:コードポイント 13000 はこの文字です。