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码全部枚举一遍;
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中的字库文件拿过来用;