C# サンプル集 |
Visual Basic 中学校 > C# サンプル集 > 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}) は収録されていません。");
}
メモ: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}) は収録されていません。");
}
メモ: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}) は収録されていません。");
}
メモ:Windows フォームアプリ や コンソールアプリ や ASP.NET Core Webアプリなどでこのプログラムを実行するにはWPFアプリの有効化が必要です。 その方法 → WPFの機能を有効にする
メモ:コードポイント 13000 はこの文字です。