|
|
眼睛小的鞭炮 · Windows 下 Nginx 配置 ...· 1 年前 · |
|
|
成熟的遥控器 · 虚拟机系列 | Microsoft Azure· 1 年前 · |
|
|
爽快的凉茶 · 有哪些 C++ 的 JSON 库比较好呢? ...· 2 年前 · |
|
|
豪爽的烤面包 · javascript - Using ...· 2 年前 · |
|
|
跑龙套的葡萄酒 · uni-app在跨平台小程序中的实践 - ...· 2 年前 · |
这一整天都让我抓狂。
我需要获取一个字体文件名(例如:Arial.ttf)基于其名称(在本例中为Arial)以及它是粗体、斜体还是两者兼有。使用这些信息,我需要找到字体文件,以便我可以使用它进行渲染。
更多的例子:
关于如何在C++ (Win32)中实现这一点,有什么想法吗?
发布于 2011-01-02 17:49:33
首先,据我所知,没有可靠的方法可以做到这一点。
Windows API处理的是字体系列和映射,而不是字体文件,后者是在较低级别处理的。还要注意的是,即使你设法获得了字体的文件名,也没有渲染函数(据我所知)会接受它,那么你会怎么处理它呢?
也就是说,您可以在注册表项
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Fonts
中查找,以便从其逻辑名称中获得字体的文件名。该解决方案的实现可以在
here
中找到。
发布于 2016-08-23 13:35:32
与之前的帖子相关,这似乎是一种可靠的方式:
1)从HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Fonts\中读取已注册的Window字体列表\您将在此处获得文件名和备用文件路径。字体名称没有什么用处,因为它们可能会随用户的区域设置而变化。
2)加载TrueType文件(.ttf、.ttc、.otf):使用FreeType https://www.freetype.org/ 。只需初始化freetype库并使用FT_New_Face(库、路径、0和面)加载face即可。
3)使用FreeType获取字体系列名称。使用FT_Get_Sfnt_Name_Count()和FT_Get_Sfnt_Name()获取字符串表。您需要检查编码是否为Ansi、UTF16或其他,因为某些字符串将采用多种不同的语言和编码。
4)获取OS2 TrueType属性。使用(TT_OS2 *) FT_Get_Sfnt_Table (face,ft_sfnt_os2)获取OS2结构。使用 https://www.microsoft.com/typography/otspec/os2.htm#fc 之类的文档解释结构
5)现在您有了字体文件路径、族名称、样式属性和其他信息。构建一个列表,并根据字体系列和样式搜索文件的函数。
发布于 2012-12-20 08:42:32
这个 Code Project project 可以做你想要的事情。因为GetWinVer函数在XP停止,所以它在Windows7上失败了。为Windows7添加案例是微不足道的。
https://stackoverflow.com/questions/4577784
复制相似问题
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2023 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号: 粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287