您的位置:首页 > 移动开发 > Android开发

android中用freetype提取字模

2015-09-24 15:37 477 查看
1 从github下载可以通过NDK编译的freetype,地址

https://github.com/CyanogenMod/android_external_freetype
2 建立一个testjni工程,添加add native support (工程右键->android tools->add native support,可以产出jni目录), 把上面的lib copy到testjni工程的jni目录下,

并简单修改Android.mk和Aplication.mk文件,最后结果参见代码;

demo地址:http://download.csdn.net/detail/sohu_2011/9136721

3 去freetype官网查看api用法,有demo;

http://freetype.sourceforge.net/freetype2/documentation.html
4 由于是提取字模,所以在调用FT_Render_Glyph(ftFace->glyph, FT_RENDER_MODE_MONO)

时采用FT_RENDER_MODE_MONO选项;

5 在testjni工程的jni中默认有个testjni.cpp,修改为testjni.c,因为Android.mk用的是testjni.c,

不管改不改,只要保持一致即可;

6 因为我在testjni.c中习惯是用的c方式的jni,避免编译出错,所以需要加上:

#ifdef __cplusplus

extern "C" {

#endif



...code...



#ifdef __cplusplus

}

#endif

7 在testjni中添加一个FreeTypeLib类,目的是加载使用freetype库

8 需要注意的问题:

A java中字符的unicode码叫code point,所以要获得某个字符的unicode码,其实是获取其code point;

可参考http://www.ibm.com/developerworks/cn/java/j-unicode/

String text = "一丁丂七丄";

例子:

for(int i = 0; i < text.codePointCount(0, text.length()); ){

int code = text.codePointAt(i);

Log.e(TAG,String.format("0x%x", code));

i += Character.charCount(code);

}

上面就把每个字的unicode码全部枚举一遍;

B 采用FT_RENDER_MODE_MONO提取出来的bitmap是每个bit表示一个点;

最后说一句,字库文件是从android系统目录下找的;用的时候copy到app私有目录中;该字库文件也可以在window中的字库文件拿过来用;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: