2016-06-30 2 views
1

Android NDK 프로젝트에서 Freetype 글꼴 렌더링을위한 .ttf 글꼴 파일을 포함해야합니다. 어디서 APK에 넣을 수 있을까요?Android NDK 프로젝트에 글꼴 파일 (.ttf)을 포함하려면 어떻게해야합니까?

+0

일반적인 접근 방식은'assets /'에 넣는 것입니다. 나는 당신이 그것을 어떻게 사용할 지 잘 모르지만 내 생각 엔 자산 (AssetManager'에서)을 파일 시스템의 로컬 파일로 복사 한 다음 네이티브 코드가 그 로컬 파일 시스템 복사본을 사용해야 할 것입니다. – CommonsWare

+0

자산이 작동했습니다. 답변으로 게시 하시겠습니까? – iHowell

+0

NDK와 관련하여 해당 자산을 어떻게 사용하고 있는지 설명 할 수 있으므로 답변을 게시하는 것이 좋습니다. – CommonsWare

답변

-1

src/main/에서 나는 내가 .ttf 파일을 배치 java/, jni/res/ 폴더와 함께 다른 폴더 assets/를 생성하고 그것은 APK에 업로드되었습니다.

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

관련 문제