访问 OTF 字体

8

我尝试使用安装在我的系统上的OTF字体,但失败了:

FontFamily family = new FontFamily(name_for_my_font);

我试图列出系统中的所有字体,但没有看到所需的字体:

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

但是我可以在字体文件夹中看到我的字体。它的扩展名是OTF。也许这就是问题所在?我只能看到TTF字体。但是为什么呢?我该如何从程序中访问OTF字体?

更新:抱歉,问题出在OTF上而不是TTF!我已经在我的答案中进行了更正。


1
正好相反,System.Drawing 只能处理 TrueType 字体,无法处理 OpenType 字体。 - Hans Passant
哇!我对此一无所知。那么我该如何访问我的 OTF 字体? - Michael Z
有一个简单的解决方案和一个困难的解决方案。 简单的解决方案是停止尝试使用OpenType字体,因为它们永远不会在Winforms应用程序中工作。 困难的解决方案是放弃你所拥有的一切并转向WPF。 - Hans Passant
2个回答

9
问题在于OpenType字体有多种类型,其中一种基于TrueType轮廓,另一种基于PostScript Type 1轮廓。Windows GDI+图形API不支持PostScript Type 1轮廓。这有点讽刺,因为OpenType字体格式是由Microsoft创建的,原因是无法从Apple获得一些字体技术的许可。
因此,如果Windows应用程序基于GDI+,它将无法呈现具有PostScript Type 1轮廓或PostScript Type 1字体的OpenType字体。不幸的是,System.Drawing是使用GDI+实现的。您唯一的选择是坚持使用TrueType轮廓的字体。
(或者,如果您非常绝望,可以P/Invoke到“classic” GDI并将字体渲染到位图中。)

0

2
  1. 这如何帮助我访问我的OTF字体?
  2. 我也无法使用您的方法看到我的字体。
- Michael Z
1
这仍然是一个很好的答案,可以看到安装的字体。我可能需要使用Pinvoke,因此感谢您能够列出字体的步骤。 - Carter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接