字形和字形运行

字形和字形运行在 DirectWrite API(字形呈现层的最低功能层中可用。

标志符号

字形是给定字体中字符的物理表示形式。 字符可能有许多字形,系统上的每个字体都可能为该字符定义不同的字形。

两个或更多字形也可以组合成一个字形,此过程称为字形组合。 这也可以在相反的方向上完成,即将单个字形拆分为多个字形,称为字形分解。

备用字形

字体可以为字符提供替代字形,例如 Pericles OpenType 字体的样式替代字形,如以下屏幕截图所示。 “A”、“E”和“O”字符以风格替代字形呈现。

“古代绿色神话”的屏幕截图,使用备用字形显示“a”、“e”和“o”

替代字形的另一个示例是斜体字形。 以下屏幕截图显示了 Pescadero 字体的标准字形和斜面字形。

标准字形和字形中字母“a”到“n”的屏幕截图

通过 OpenType 提供斜体和其他版式功能,包括更精细的备用字形。 OpenType 版式功能可以通过使用 IDWriteTextLayout::SetTypography 并传递与所需特征关联的 DWRITE_FONT_FEATURE_TAG 枚举常量来应用于文本范围。

字形运行

字形运行表示一组连续的字形,这些字形具有相同的字体和大小,以及相同的客户端绘制效果(如果有)。 下划线和删除线不是应用于文本范围的字形运行的一部分,稍后会绘制。 内联对象(如图像)也是单独绘制的,因为它们不是字体的一部分。

IDWriteFontFace 接口

DirectWrite使用与 Windows Pesentation Foundation (WPF) 相同的字体分类系统,因此每个字体系列可以有多个物理字体。 字体(如 DirectWrite 中的 IDWriteFontFace 接口)表示具有特定粗细、倾斜和拉伸的物理字体。 它包含字体人脸类型、适当的文件引用、人脸识别数据和各种字体数据,例如指标、名称和字形轮廓。

IDWriteFontFace 可以直接从字体名称创建,也可以从字体集合中获取。

字形度量值

单个字形具有与之关联的指标。 可以使用 IDWriteFontFace::GetDesignGlyphMetrics 方法获取标志符号运行中所有字形的指标。 这将返回一个 DWRITE_GLYPH_METRICS 结构,该结构具有前向宽度、左侧和右侧轴承、顶部和底部轴承、高度和垂直基线原点。

下图显示了两个不同字形字符的各种指标。

两个不同字形的指标示意图

绘制字形运行

实现自定义文本呈现器时,标志符号的呈现由 IDWriteTextRenderer::D rawGlyphRun 处理,该回调方法作为从 IDWriteTextRenderer 派生的类的一部分实现。 传递给 DrawGlyphRun的DWRITE_GLYPH_RUN结构包含一个名为 fontFaceIDWriteFontFace 对象,该对象表示整个字形运行的字体。

IDWriteFontFace 对象还提供 GetGlyphRunOutline 方法,该方法使用指定的几何接收器回调(如使用 Direct2D 呈现时 ID2D1SimplifiedGeometrySink)计算字形轮廓。

有关详细信息,请参阅 如何实现自定义文本呈现器 主题。