3

freetypeを使用するMSVCプロジェクトがあり、Unicodeに移行しようとしています。ただし、freetype関数はファイルパスのLPCTSTR引数を受け入れず、「constchar*」が必要です。したがって、次のようなコード

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

プロジェクトがASCIIの場合は機能していましたが、Unicodeの場合は機能しなくなりました。FreeTypeにUnicodeファイル名を受け入れさせる方法はありますか?一部のプリプロセッサはそれをUnicodeに切り替えるように定義していますか?

4

3 に答える 3

6

C ++標準(2003)にはwfopenはありません。freetypeは移植可能であることが意図されているため、constchar*ファイル名のみを受け入れることができるfopenのみを使用します。したがって、ファイルをメモリにロード(またはメモリマップ)してから、FT_New_Memory_Faceを使用してフォントを作成するか、wchar_t pszFileNameを8ビットエンコーディングに変換します。変換が不可能なため、文字が失われる可能性があります。

Linuxsetlocaleでは、 fopenがUTF8文字列を受け入れ、wchar_t文字列をUTF8に変換するように使用を試みることができます。ただし、Windowsでは機能しません。したがって、ファイルをメモリにロードするか、pszFileNameを8ビットエンコーディングに変換してから、FT_New_Faceに渡します。

于 2012-04-09T15:09:39.307 に答える
1

最善の策は、おそらくフレームワークの規則に従ってインポートtchar.hし、代わりに使用することです(そして、など_tfopenに切り替えます)。これにより、コードでUTF-16またはUTF-8のいずれかをサポートしながら、ほとんど変更を加えずにLinuxとWindows用に同じコードをコンパイルできます。LPCTSTR_T("your_string")

于 2012-04-09T15:31:34.673 に答える
1

FT_Open_Faceメソッドを使用でき、引数としてFT_Open_Args構造体が必要です。FT_Open_Args.streamでは、通関の読み取りとクローズのコールバックを設定でき、FreeTypeは任意のストリームからフォントデータを読み取ることができます。

幸運を

于 2012-10-31T06:54:10.857 に答える