使用FreeType制作嵌入式(WINCE)使用字体文件
来源:互联网 发布:mysql 图形化工具 mac 编辑:程序博客网 时间:2024/06/16 00:34
在产品设计初期,本人只想实现一下字体的使用,不想过多依赖于平台提供的API,为日后移植到Linux等其他系统也可通用,于是乎开始Google,接触到了FreeType,通过对FreeType的剪裁,让它只支持TrueType的字体,的确FreeType库体积小了许多,使用代码如下:/*直接指定字体像素大小 */ft_error = FT_Set_Pixel_Sizes(face, //face对象句柄 0, //象素宽度 size); //象素高度以上是设置字体的信息,可以设置字号。unsigned short fontCode = 0x4F60;FT_GlyphSlot slot = face->glyph;ft_error = FT_Load_Char( face, fontCode, FT_LOAD_NO_BITMAP | FT_LOAD_RENDER );以上是取得一个“你”字的信息,之后即可从slot->bitmap.buffer中取得这个字号的“你”灰度值,然后进行绘制。当然使用这个两个函数之前,需要对FreeType进行初始化,ft_error = FT_Init_FreeType( &ft_Lib );if ( ft_error ){FT_Done_FreeType(ft_Lib);return 0; }ft_error = FT_New_Memory_Face( ft_Lib, , /* 缓存的第一个字节 */ , /* 缓存的大小(以字节表示) */ 0, /* face 索引 */);当然也可以使用FT_New_Face,Whatever,能用就行。但是,问题来了,使用之后,发现CE的CPU使用率急速上升,猜想可能是FreeType内部解压花费太多,随后开始琢磨用FreeType提取自己需要的字号,然后数据打包到文件,然后放到项目中进行绘制,比如12,14号字之类的,于是开始了制作文件之旅。
UNICODE码,中文是从0X4E00开始,我使用了2万多个汉字,一直到0X9FA0,当然还有一些Ascii与全角字符等,全角字符UNICODE编码从0xFF01开始,于是乎开始设计结构体,把需要的信息全部填充,例如字码,宽高,在文件的位移,size,left,top等信息,索引文件使用字码升序排列,易于用二分搜索,这样在使用时,效率就体现出来了,用FreeType读取出来之后,然后把数据信息压缩至文件,比如font.dat,使用的是zlib,然后在项目中,读取数据,zlib解压之后,通过pitch同样可以读取到灰度值,然后进行绘制,这样,即使放大缩小也不会像字体点阵那样,失真较大,想用什么字体,在制作文件,new face的时候,就用那种字体初始化FreeType,比如用微软雅黑。字体文件的大小与所使用的字号多少相关,如果实在每种字号都需要使用,那么建议还是用FreeType,如果只用5种以内,则可以考虑该实现方法,在win系统用FileMapping或Linux的mmap,速率一样很不错。
设计出来的字体文件,已经在WINCE,WINXP,LINUX上使用过。
- 使用FreeType制作嵌入式(WINCE)使用字体文件
- 使用FreeType绘制字体
- Symbian使用freetype实现自定义字体功能
- 使用freetype-infinality 美化 fedora 字体
- freetype安装使用详解(矢量字体操作)
- wince使用自定义字体
- wince使用自定义字体
- ArcGIS使用字体文件制作符号库
- ArcGIS使用字体文件制作符号库!
- freetype使用
- Freetype 使用
- 使用 FreeType
- 第二人生的源码分析(五十八)使用FreeType字体
- 使用freetype生成字体图片FireMonkey效率问题
- 使用WinCE CAB Manager制作CAB安装文件
- 使用WinCE CAB Manager制作CAB安装文件
- 使用FontLab Studio制作字体
- 使用icomoon制作icon字体
- 串口通信CMSComm
- shell 实现 urlencode
- xcode 4.3版本 在连接上ipad后,程序用nslog不显示中文的解决办法
- 中国IC公司到底缺什么?
- String length()
- 使用FreeType制作嵌入式(WINCE)使用字体文件
- php-cgi 9000端口被占用,nginx无法打开php页面(The page you are looking for is temporarily unavailable.Please try)
- oracle 触发器
- linux ftok()函数
- 邮件槽通信
- 新一篇Apache2与Tomcat7整合
- 64位系统下文件重定向和注册表重定向
- OPENFILENAME 结构详解
- 从JVM内存管理的角度谈谈JAVA类的静态方法和静态属性