嵌入式 装载一个字形图像

 3.7.1 把一个字符码转换为一个字形索引

通常,一个应用程序想通过字符码来装载它的字形图像。字符码是一个特定编码中代表该字符的数值。
例如,字符码 64 代表了 ASCII 编码 中的’ A ’ 。

一个 face 对象包含一个 或多个字符 表 (charm ap) ,字符表是 用来转换字 符码到字形 索引的。例 如,很多
T r u e T ype 字 体包含两个字符表, 一个用来转换 Un icod e 字符 码到字形索引, 另一个用来转换 Apple Rom an 编
码到字形索引。这样的字体既可以用在 W i nd ow s (使用 U nic ode )和 Mac i ntos h (使用 Apple R om a n ) 。同时
要注意,一个特定的字符表可能没有覆盖完字体里面的全部字形。

当新建一个 face 对象时, 它默认选择 Un icod e 字符 表。如果字体没包含 U nicode 字符表 ,FreeT ype 会尝
试在字形名的基础上模拟一个。 注意, 如果字形名是不标准的那么模拟的字符表有可能遗漏某些字形。 对于
某些字体,包括符号字体和旧的亚洲手写字体, Un icod e 模 拟是不可能的。
我们将在稍后叙述如何寻找 face 中 特定的字符表。 现在我 们假设 face 包含至少一个 Un ico d e 字符表,并
且在调用 FT_New_Face 时已经被选中。 我们使用 FT_G et_C har _ Ind ex 把一 个 Un icod e字 符码转换为字形索引,
如下所示:

g l yp h_ in dex = FT_ Get _Ch a r_ In dex( fac e , charc o de);
这个函数会在 face 里被 选中的字符表中查找与给出的字符码对应的字形索引。如果没有字符表被选中,
这个函数简单的返回字符码。

注意, 这个函数是 FreeT ype 中罕有的 不返回错误码的函数中的一个。 然而, 当一个特定的字符码在face
中没有字形图像,函数返回 0 。按照约定,它对应一个特殊的字形图像――缺失字形,通常会显示一个框或
一个空格。

3.7.2 从 face 中装载一个字形

一旦你获得了字形索引,你便可以装载对应的字形图像。在不同的字体中字形图像存储为不同的格式。
对于固定尺寸字体格式,如 FNT 或者 PCF ,每一个图像都是一个位图。对于可伸缩字体格式,如 T r u e Type
或者 Ty p e 1 , 使 用 名为轮 廓 (outlines) 的矢量形 状 来描述每 一 个字形。 一 些字体格 式 可能有更特 殊的途径 来表
示字形 (如 MetaF o n t ― ―但这个格式不被支持) 。 幸运的, FreeT ype 2 有足 够的灵活性,可以通过一个简单的
API 支持任 何类型的字形格式。

字形图像 存 储在一个 特 别的对象 ― ―字形槽 (gly ph sl ot) 中。就如其名 所 暗示的, 一 个字形槽 只是一个

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值