繁体   English   中英

freetype 函数可以接受 Unicode 个文件名吗?

[英]Can freetype functions accept Unicode filenames?

我有一个使用 freetype 的 MSVC 项目,现在我正试图将它移动到 Unicode。但是 freetype 函数不接受文件路径的 LPCTSTR arguments,它们需要“const char*”。 所以代码像

    WINDOWS_FONT WindowsFont;
    // ....
    FT_New_Face (pLibrary, WindowsFont.pszFileName, i, &face); // WindowsFont.pszFileName is LPTSTR

曾经在项目为 ascii 时工作,但在项目为 Unicode 时不再工作。有没有办法让 freetype 接受 Unicode 文件名,一些预处理器定义将其切换为 unicode 也许?

C++ 标准 (2003) 中没有 wfopen。 由于 freetype 是可移植的,它只使用 fopen,它只能接受 const char* 文件名。 因此,要么将文件加载到 memory(或 memory map),然后使用 FT_New_Memory_Face 创建字体,要么将 wchar_t pszFileName 转换为 8 位编码,可能会因无法转换而丢失字符。

在 linux 上,您可以尝试使用setlocale ,这样 fopen 将接受 UTF8 字符串,将 wchar_t 字符串转换为 UTF8。 但是在 windows 上它不起作用 所以要么加载文件到memory,要么将pszFileName转换成8位编码,然后传给FT_New_Face。

您最好的选择可能是遵循框架的约定并导入tchar.h ,然后改用_tfopen (并切换到LPCTSTR_T("your_string")等)。 这将使您可以为 Linux 和 Windows 编译相同的代码,几乎没有任何更改,同时在代码中支持 UTF-16 或 UTF-8。

您可以使用 FT_Open_Face 方法,它需要一个 FT_Open_Args 结构作为参数。 在FT_Open_Args.stream中可以设置自定义读取和关闭回调,FreeType可以从任意一个stream中读取字体数据。

祝你好运

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM