通过WinAPI提取字体版本
Extracting Font Version via WinAPI
Windows控制面板字体窗口通常显示字体的版本信息。例如
Font Name: Fontawesome
Version: Version 4.3.0 2015
我在Windows API和SO中搜索过,但我没有设法找到如何以编程方式提取此。
任何想法?
注意,如果你在谈论字体预览程序;它不是"Windows",它实际上只是一个与操作系统捆绑在一起的小实用程序。为了向您显示这些信息,它会从字体的name
表中查询信息(在这里进行说明,以理解其结构,并在"名称id"一节中解释每个record id
的语义)。
要自己访问这些数据,请使用DirectWrite的(不是GDI,因为它是古老和过时的)IDWriteFontFace::TryGetFontTable方法,并获得对name
表的引用,每个有效的OpenType字体都包含该表。然后根据命名表的规范提取所需的值。
并且要明确: ttf
和otf
字体都是OpenType字体,第一个只是"使用TrueType表布局编码的轮廓的OpenType",第二个是"使用CFF数据块编码的轮廓的OpenType"。如果你不知道这两者之间的区别是什么,那是因为区别并不重要:就好像我们决定将PNG文件称为nil
和ili
文件,这取决于它们是否使用隔行。
(ttf
文件扩展名只是早于OpenType规范本身,所以当每个人都切换到OpenType字体时,扩展名被保留以向后兼容。几十年过去了,事实证明,继续这样做比决定"何时摆脱它"更容易,所以我们被同一种文件使用两个扩展名所困。历史!)
相关文章:
- 在C++中测量postscript字体宽度
- 为cl.exe(Visual Studio代码)指定命令行C++版本
- 导入库可以跨dll版本工作吗
- 在调用FreeLibrary后,释放动态链接到具有相同版本的CRT堆的DLL的内存
- 在clang++预处理器中确定gcc工具链版本
- 码头化的C++应用程序是否向后兼容早期的内核版本
- 如何在Directwrite中获得给定字体的可用OpenType功能
- 不同的Visual Studio版本中缺少.dll
- 用符号版本替换对函数的所有调用
- luaL_dofile在已知良好的字节码上失败,可以使用未编译的版本
- 正在解码MSVC 32位版本的程序集(作业).没有手术做什么
- 我需要分发哪些版本的可再分发文件
- CV_OCL_RUN宏如何在OpenCV(版本3.4.5)的goodFeaturesToTrack实现中工作?
- 在运行时读取 libstdc++ 版本
- 如何声明一个可以在整个程序中使用的全局 2d 3d 4d .. 数组(堆版本)变量?
- FindPackageHandleStandardArgs.cmake:137 的 CMake 错误(消息):找不到 Boost (缺少:正则表达式)(找到合适的版本"1.72.0",
- Vulkan SDK 版本 1.1.85.0 在 Kubuntu 18.10 上链接
- 如何正确实现与基类不同的版本?
- 从预处理器获取 Windows 版本(C++ Win32)
- 通过WinAPI提取字体版本