# 'avar' 表
# 介绍
在绘制带有变化形式的字形时,用户指定的坐标必须从轴的最小值,默认值和最大值定义的空间映射到-1.0、0和1.0的归一化空间。 轴变化表(标记:'avar')允许字体修改轴值和这些归一化值(表示为shortFrac值)之间的映射。 到规范化坐标的默认映射可以由以下伪代码片段表示:
if (userValue < axisDefault)
normalizedValue = (userValue - axisDefault) / (axisDefault - axisMin)
else
normalizedValue = (userValue - axisDefault) / (axisMax - axisDefault)
如果存在“轴变化”表,则可以重新映射归一化的值,从而允许字体指定如何应用变化的非线性变化。
- 注意: 本章中的内容仅适用于TrueType字体。
# 轴变化表格式
下表显示了“轴变化标题”:
| 类型 | 名称 | 含义 |
|---|---|---|
| fixed32 | version | 表格版本; 设置为0x00010000。 |
| int32 | axisCount | 变化轴数。 |
| shortFracSegment | segment[axisCount] | 每个轴的线段映射。 |
shortFracSegment 格式如下:
| 类型 | 名称 | 含义 |
|---|---|---|
| uint16 | pairCount | 该轴的对数。 |
| shortFracCorrespondence | correspondence[pairCount] | 对应值数组。 |
下表显示了shortFracCorrespondence结构:
| 类型 | 名称 | 含义 |
|---|---|---|
| shortFrac | fromCoord | 标准化用户空间中的值。 |
| shortFrac | toCoord | 标准化轴空间中的值。 |
shortFracSegment定义了用户坐标(fromCoord)和沿变化轴(toCoord)的坐标之间的映射。 映射表示为一系列对应点,每对对应点指定用户空间中的范围和轴空间中的对应范围。 使用此功能,可以将用户坐标的每个值映射到轴空间中的相应值。
# 细分示例
让我们看一下此映射如何工作的示例。 下表显示了字体的“ avar”表中可能存在的一组映射数据。
| From (user) | To (axis) |
|---|---|
| -1.0 | -1.0 |
| -0.75 | -0.5 |
| 0 | 0 |
| 0.4 | 0.4 |
| 0.6 | 0.9 |
| 1.0 | 1.0 |
下表显示了如何使用此“ avar”数据将指定的用户值映射到轴值。
| User value | Axis value |
|---|---|
| -1.0 | -1.0 |
| -0.75 | -0.5 |
| -0.5 | -0.3333 |
| -0.25 | -0.1667 |
| 0 | 0 |
| 0.25 | 0.25 |
| 0.5 | 0.65 |
| 0.75 | 0.9375 |
| 1.0 | 1.0 |
一个段必须始终具有至少三个对应对:负一映射到负一,零映射到零和一个映射到一。 这意味着线段可能不会更改坐标值的符号。 段的对必须在fromCoord上排序,以-1.0开头,以1.0结尾。
注意: shortFrac是一个int16,其偏差为14。这意味着它可以表示1.999(0x7fff)和-2.0(0x8000)之间的数字。 1.0存储为16384(0x4000),-1.0存储为-16384(0xc000)。