字形和字形运行
字形和字形运行在 DirectWrite API(字形呈现层)的最低功能层中可用。
标志符号
字形是给定字体中字符的物理表示形式。 字符可能有许多字形,系统上的每个字体都可能为该字符定义不同的字形。
两个或更多字形也可以组合成一个字形,此过程称为字形组合。 这也可以在相反的方向上完成,即将单个字形拆分为多个字形,称为字形分解。
备用字形
字体可以为字符提供替代字形,例如 Pericles OpenType 字体的样式替代字形,如以下屏幕截图所示。 “A”、“E”和“O”字符以风格替代字形呈现。
替代字形的另一个示例是斜体字形。 以下屏幕截图显示了 Pescadero 字体的标准字形和斜面字形。
通过 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结构包含一个名为 fontFace 的 IDWriteFontFace 对象,该对象表示整个字形运行的字体。
IDWriteFontFace 对象还提供 GetGlyphRunOutline 方法,该方法使用指定的几何接收器回调(如使用 Direct2D 呈现时 ID2D1SimplifiedGeometrySink)计算字形轮廓。
有关详细信息,请参阅 如何实现自定义文本呈现器 主题。