gpt4 book ai didi

c++ - 从字体名称获取 TrueType 字体 "post"表

转载 作者:可可西里 更新时间:2023-11-01 10:10:54 27 4
gpt4 key购买 nike

我正在尝试从已安装的 TrueType 字体中提取“post”表,我只知道它的名字。我怎样才能做到这一点?

我看到了 GetFontData 函数,除了它从设备上下文当前加载的字体中获取字体数据外,它似乎几乎完全符合我的要求。在我的例子中,虽然我没有设备上下文,但只有字体名称。
此外,我还看到了类似的查询,例如 this ,用于查找和检索整个字体文件,但这似乎不必要地低效和冗长,因为 Windows 可以 已经加载和解析字体数据(正如我们在 GetFontData 中看到的那样)。此外,我不需要整个文件,只需要“post”表。真的没有办法,只能自己实现吗?

最佳答案

可以在没有窗口或 GUI 的情况下调用 GetFontData(...),例如从命令行程序,只需动态创建一个虚拟设备上下文并在其中选择一种字体

#include <Windows.h>
#include <vector>

std::vector<unsigned char> GetFontDataByName(const wchar_t* font_name)
{
HDC hdc = CreateCompatibleDC(NULL);

auto font = CreateFont(0, 0, 0, 0,
FW_NORMAL, FALSE, FALSE, FALSE,
ANSI_CHARSET, OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,
DEFAULT_PITCH,
font_name);
SelectObject(hdc, font);
auto num_bytes = GetFontData(hdc, 0, 0, NULL, 0);
std::vector<unsigned char> font_data(num_bytes);
auto result = GetFontData(hdc, 0, 0, &(font_data[0]), num_bytes);

DeleteDC(hdc);

return font_data;
}

int main()
{
auto font_data = GetFontDataByName(L"Times New Roman");

return 0;
}

关于c++ - 从字体名称获取 TrueType 字体 "post"表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56150586/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com