中文摘要:
为了得到高质量而且灵活(包括对字形的各种变形操作) 的字符显示,同时又能实现所见即所得(WYSIWYG) 的打印,传统的使用点阵字库的方法已经不能满足要求. 有一个很好的方法———使用TrueType字库,可以同时解决以上两个问题. 介绍了TrueType 技术的基本原理及在VxWorks 系统中如何通过FreeType应用TrueType 字库. 在实际应用中,该技术很好地解决了上述问题. 但这种技术也可以很容易地移植到很多其他系统中,如Linux.
英文摘要: In order to obtain high quality and flexible (all kinds of t ransformations) characters display and
What You See Is What You Get (WYSIWYG) printing , the traditional way of Using Dot-Ma rix Font
can no longer satisfy our needs. Here is a good solution that can solve both the problems : Using TrueType
font . The basic knowledge of TrueType was int roduced as well as how to use it in VxWorks system with
the help of FreeType. It well solved the problems above. This technology can also be used in many other
systems like Linux.
与传统的使用点阵字库相比,
TrueType 字库
至少会带来这样的好处:可以高质量地实现字符
的无级放大或缩小,高质量地实现字符的旋转、倾
斜等操作(如图1) ,方便地实现“所见即所得”.
由于有以上优点,在很多对字形有特殊操作
要求的地方最好使用
TrueType 字库. Windows
中现在使用的就是
TrueType 字库.
111 TrueType 简介
TrueType 字库是一种轮廓字库, 在
TrueType 字库中,字形的信息是通过使用一系列的点
来描述的. 这些点之间或通过直线段,或通过二次
贝塞尔曲线来连接,从而形成字形轮廓. 图2 是汉
字“乾”的字形示例.
图2 左边图形是直接连接字库中描述“乾”的
点形成的,其中的圈表示描述字形的点:小圈表示
直线段或贝塞尔曲线的端点,大圈表示贝塞尔曲
线的控制点.
形成字形轮廓时对点的处理是这样的:假设
有了起点P0 ( x0 , y0 ) (它肯定是端点,即小圈) ,
再找下一个点P1 ( x1 , y1 ) . 如果P1 也是端点,则
用直线段连接P0 , P1 ,再将P1 作为新的起点继续连接剩下的点;否则P1 是贝塞尔曲线控制点,
再找下一个点P2 ( x2 , y2 ) . 如果P2 是端点,则将
P0 , P1 , P2 用贝塞尔曲线连接, P2 作为新的起点
继续连接剩下的点; 否则再找下一个点P3 ( x3 ,
y3 ) ,计算P2 与P3 的中点Px ,将P0 , P1 , Px 用
贝塞尔曲线连接, Px 作为新的起点继续连接剩下
的点. 图2 右边的图形是加入了二次贝塞尔曲线
形成的实际见到的字形轮廓.
得到字型轮廓后,再对它进行填充就得到了
需要的字符位图. 剩下的工作就很简单了,通过打
点或贴图都可以画出字符来.
112 FreeType 的介绍
使用
TrueType 字库也有一定的困难: 主要
就是需要对
TrueType 字库的格式要有所了解,
这样才能正确地提取出字形信息,而这对大多数
用户来说很困难,也是很麻烦的. 但是现在有了
FreeType 这个开放源码的共享软件(可以从网上
下载) ,就不必亲自做这些工作了. FreeType 可以
在很多平台下编译并使用(如Windows、Linux、
VxWorks 等) . 利用FreeType 提供的API ,得到字
形信息,形成位图等工作都可以很方便地完成.
2 UGL 字体驱动
UGL 是Zinc 的基础, 首先在
VxWorks 的
UGL 字体驱动中加入
TrueType 字库支持:
1) 根据
VxWorks 的
UGL 字体驱动的接口标
准写出驱动代码.
2) 用行命令方式编译
UGL. 在
UGL 文档中
介绍了行命令方式编译
UGL ,以及为加入新字库
支持而修改相关文件(如ugl Init . h 等) 的方法.
现有
UGL 字体驱动只提供了用于水平方向
字符显示的接口,为了能够更加灵活地显示字符,
可以在驱动接口中增加函数指针
UGL-STATUS
( 3 textDrawFree) ;为了支持打印,可以加入函数
指针
UGL- STATUS ( 3 text Print ) . 当然如果用
户要调用这2 个函数,就得在ugl. h 中加入相应
的函数声明,并在uglfont1. c 中加入相应的函数定义.
4 结束语
在
VxWorks 中使用
TrueType 字库的方法已
成功地应用于
VxWorks 嵌入式地理信息系统中,
并可以很容易地移植到很多其他的系统中.