2016-06-30 13 views
1

Android NDKプロジェクトでFreetypeフォントレンダリング用の.ttfフォントファイルを含める必要があります。私はそれをAPKに入れられるようにどこに置くのですか? src/main/Android NDKプロジェクトにフォントファイル(.ttf)を含めるにはどうすればいいですか?

+0

典型的なアプローチは、 'assets /'に入れることです。どのように使用するのか分かりませんが、AssetManagerからアセットをファイルシステム上にコピーし、ローカルファイルシステムのコピーをネイティブコードで使用する必要があります。 – CommonsWare

+0

資産が機能しました。回答として投稿したいですか? – iHowell

+0

NDKに関してその資産をどのように使用しているか説明できるので、回答を投稿することをお勧めします。 – CommonsWare

答えて

-1

私は.ttfファイルを置き、それをAPKにアップロードされたjava/jni/、およびres/フォルダと一緒に別のフォルダassets/を作成しました。

FT_New_Face(ft, "/assets/Arial.ttf", 0, &face); 

をしかし、それは別の問題だ:私はまだFreetypeのは、現在のコマンドがそれを取得していないとして、それを見るために取得しようとしています。

+0

なぜ答えがあるのでしょうか?その前のニュース?私は同じ問題に遭遇する。 –

1

解決策を追加します。それは、assetManagerを渡して、C++側の参照を保持します。フォントttfファイルは、フォントフォルダー内のassetsフォルダーに保管されています。

FT_library library; 
FT_Face fontFace; 

AAsset* fontFile = AAssetManager_open(manager, "fonts/Roboto-Medium.ttf", AASSET_MODE_BUFFER); 
off_t fontDataSize = AAsset_getLength(fontFile); 

FT_Byte* fontData = new FT_Byte[fontDataSize]; 
AAsset_read(fontFile, fontData, (size_t) fontDataSize); 
AAsset_close(fontFile); 


if (FT_Init_FreeType(&library)) { 
    LOGE("Could not load library"); 
} 
if (FT_New_Memory_Face(library, (const FT_Byte*)fontData, (FT_Long)fontDataSize, 0, &fontFace)) { 
    LOGE("Load memory failed"); 
} 

assetManagerを渡すだけでオブジェクトとして渡し、C++側で変換します。

AAssetManager *manager = AAssetManager_fromJava(javaEnv, assetObject); 
+0

これはカスタムフォントを読み込むためのもので、システムフォントの場合はAssetManagerなしで直接アクセスするので、これは不要です。 – Adrian

関連する問題