簡體   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