测试是否安装了字体(Win32)
如何测试字体是否已安装?
最终,我想实现类似 HTML 的字体选择,即当指定“Verdana,Arial”时,它应该选择第一个安装的字体。
这个问题提供了.NET的答案 - 似乎推荐的方法是创建字体,然后比较实际使用的字体。
这是最有效的方法吗?
How can I test if a font is installed?
Ultimately, I want to implement a HTML-like font selection, i.e. when specifying e.g. "Verdana,Arial", it should pick the first font that is installed.
This Question provides an answer for .NET - it seems the recommended way is to create the font, and then cmpare the font face actually used.
Is that the most efficient way?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您可以尝试创建字体并查看您得到的结果(从而使用操作系统的字体名称匹配/替换)。
或者您可以枚举已安装的字体并自行匹配。
“最有效”的方法将取决于“匹配”的细节,并且很可能取决于安装的字体数量。 例如,在具有 50 种字体的系统上,您可能会发现性能与安装了 1000 种字体的系统有显着不同。
最后,如果您的第一种方法(保持简单)结果证明是性能瓶颈,那么您只能在代表性系统上进行分析。
You can either try to create the font and see what you get (thus using the OS's font name matching/substitution).
Or you can enumerate installed fonts and do that matching yourself.
The "most efficient" way will depend on the details of a "match", and, in all likelihood, how many fonts are installed. On a system with, say, 50 fonts you will probably find performance is significantly different to a system with 1000 fonts installed.
In the end you can only profile on representative systems, if you first approach (keep it simple) turns out to be a performance bottleneck.
您可以使用 EnumFontFamiliesEx 枚举系统上的字体列表,或者如果您传递字体名称,则可以枚举该系列的字体。
You can use EnumFontFamiliesEx to enumerate the list of Fonts on the system, or if you pass a font name you can enumerate the fonts for that family.