字形和字形运行

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

符号

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

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

备用字形

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

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

备用字形的另一个示例是洗字形。 以下屏幕截图显示了 Pescadero 字体的标准字形和字形。

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

Swashes 和其他版式功能(包括更详细的备用字形)可通过 OpenType获得。 OpenType 版式功能可以使用 IDWriteTextLayout::SetTypography 并传递与所需功能关联的 DWRITE_FONT_FEATURE_TAG 枚举常量,从而应用于文本范围。

字形运行

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

IDWriteFontFace 接口

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

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

字形指标

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

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

两个不同标志符号 的指标关系图

绘制字形运行

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

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

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