8

システムにインストールされているOTFフォントを使用しようとしましたが、失敗しました:

FontFamily family = new FontFamily(name_for_my_font);

システム内のすべてのフォントをリストしようとしましたが、実際に必要なフォントが見つかりませんでした:

foreach (FontFamily font in System.Drawing.FontFamily.Families)
{
Console.WriteLine(font);
}

しかし、 Fontsフォルダーに自分のフォントが表示されます。OTF拡張子があります。たぶんそれが問題ですか?TTFフォントしか表示されません。しかし、なぜ?プログラムから OTF フォントにアクセスするにはどうすればよいですか?

更新: 申し訳ありませんが、問題はOTFアクセスにあり、 TTFではありません! 回答に修正を加えました

4

2 に答える 2

9

問題は、OpenType フォントにはいくつかの種類があり、TrueType アウトラインに基づくものと PostScript Type 1 アウトラインに基づくものがあることです。Windows GDI+ グラフィックス API は、PostScript タイプ 1 アウトラインをサポートしていません。OpenType フォント形式は、Apple から一部のフォント技術のライセンスを取得できなかった結果として Microsoft によって作成されたため、皮肉なことです。

そのため、Windows アプリケーションが GDI+ に基づいている場合、PostScript タイプ 1 アウトラインまたは PostScript タイプ 1 フォントを持つ OpenType フォントをレンダリングすることはできません。残念ながらSystem.Drawing、GDI+ を使用して実装されています。唯一のオプションは、TrueType アウトラインを使用するフォントに固執することです。

(または、本当に絶望的な場合は、P/Invoke を「クラシック」GDI にして、フォントをビットマップにレンダリングすることができます。)

于 2012-05-14T13:00:34.107 に答える
0

System.Drawing.Text.InstalledFontCollection http://msdn.microsoft.com/en-us/library/system.drawing.text.installedfontcollection.aspxを使用してみてください

于 2012-05-14T12:30:05.523 に答える