DirectWrite 中的新增功能
本主题介绍了适用于 Windows 10 各种版本的DirectWrite中的新增功能。
Windows 应用 SDK
Windows 应用 SDK引入了名为 DWriteCore 的 DirectWrite 新版本。 有关详细信息,请参阅DWriteCore 概述。
Windows 10 2019 年 5 月更新
未为 Windows 10 版本 1903(10.0;内部版本 18362)—也称为 Windows 10 2019 年 5 月更新添加或更新任何功能或 API。
Windows 10 2018 年 10 月更新
为 Windows 10 版本 1809(10.0;内部版本 17763)—也称为 Windows 10 2018 年 10 月更新添加或更新了以下功能和 API。
新增
Windows 10 2018 年 4 月更新
为 Windows 10 版本 1803(10.0;内部版本 17134)—也称为 Windows 10 2018 年 4 月更新添加或更新了以下功能和 API。
新建
- IDWriteFactory7界面及其方法
- IDWriteFontCollection3界面及其方法
- IDWriteFontSet2界面及其方法
Windows 10 Fall Creators Update
为 Windows 10 版本 1709(10.0;内部版本 16299)—也称为 Windows 10 Fall Creators Update 添加或更新了以下功能和 API。
新建
- DWRITE_AUTOMATIC_FONT_AXES枚举
- DWRITE_FONT_AXIS_ATTRIBUTES枚举
- DWRITE_FONT_AXIS_TAG枚举
- DWRITE_FONT_FAMILY_MODEL枚举
- IDWriteFactory6界面及其方法
- IDWriteFontCollection2界面及其方法
- IDWriteFontFace5界面及其方法
- IDWriteFontFaceReference1界面及其方法
- IDWriteFontFallback1界面及其方法
- IDWriteFontFamily2界面及其方法
- IDWriteFontList2界面及其方法
- IDWriteFontResource界面及其方法
- IDWriteFontSet1界面及其方法
- IDWriteFontSetBuilder2界面及其方法
- IDWriteTextFormat3界面及其方法
- IDWriteTextLayout4界面及其方法
- DWRITE_MAKE_FONT_AXIS_TAG宏
- DWRITE_FONT_AXIS_RANGE结构
- DWRITE_FONT_AXIS_VALUE结构
已移动
DWRITE_GLYPH_IMAGE_FORMATS枚举从dwrite_3.h
移动到dcommon.h
。
Windows 10 创意者更新
为 Windows 10 版本 1703(10.0;内部版本 15063)—也称为 Windows 10 创意者更新添加或更新了以下功能和 API。
扩展了对云字体和自定义字体集的 API 支持
Windows 10 包含的 API 允许应用从 Windows 字体服务轻松访问字体。 在 Windows 10 创意者更新中,扩展了远程字体的 API,以便轻松访问 Web 上可使用 HTTP 或 HTTPS 访问的其他源的字体。
新的远程字体 API 可用于公共或专用 Web 服务。 此外,它们还可用于访问原始、OpenType 字体文件(.ttf、.otf.、.ttc、.otc)或打包为WOFF或WOFF2容器格式的字体。 新 API 与现有 API 结合使用,以排队请求下载远程字体数据并处理实际下载过程。
其他新 API 使应用能够更轻松地处理存储在本地文件系统或加载到内存缓冲区中的自定义字体。
有关使用远程字体、自定义字体集或 WOFF/WOFF2 容器格式的新 API 的详细信息,请参阅以下主题:
另请参阅该主题中提供的 API 参考主题的链接。 DirectWrite 自定义字体集示例中也说明了使用用于处理自定义字体的新 API 和现有 API。 此示例演示了用于多种不同方案的代码实现,包括磁盘上的本地字体、Web 上的远程字体、内存中字体数据和打包为 WOFF 或 WOFF2 格式的字体。
对 OpenType 字体变体的初始支持
OpenType 字体格式规范版本 1.8 引入了令人兴奋的新格式扩展,称为 OpenType 字体变体。 DirectWrite 已在 Windows 10 创意者更新中更新,以支持变量字体的命名实例。 有关详细信息,请参阅以下主题:
Windows 10 周年更新
为 Windows 10 版本 1607(10.0;内部版本 14393)—也称为 Windows 10 周年更新添加或更新了以下功能和 API。
改进了对颜色字体的支持
从 Windows 10 周年更新开始,DirectWrite 为更广泛的颜色字体格式提供内置支持,使开发人员能够在其 DirectWrite 支持的应用程序中使用比以往类型更多的字体。 这包括对以下内容的支持:
- “COLR”OpenType 表,用于在字体中启用压缩矢量内容。 (自 Windows 8.1 起受支持)
- “SVG”OpenType 表,用于在字体中支持 SVG 内容。
- “CBDT”OpenType 表,用于在字体中支持颜色位图内容。
- “sbix”OpenType 表,用于在字体中支持颜色位图内容。
在启用D2D1_DRAW_TEXT_OPTIONS_ENABLE_COLOR_FONT标志时,Direct2D(使用 DirectWrite 进行文本呈现)自动支持这些颜色字体格式。 有关详情,请参阅以下主题:
支持 Adobe Typekit 和其他字体服务客户端
一些字体服务(例如,Adobe Typekit)具有客户端实用工具,允许用户从服务加载字体,并在其 Windows 计算机的不同应用程序中使用这些字体。 这些实用工具通常通过对 GDI 进行运行时调用以加载其他字体,而不是在系统上永久安装字体来运行。 鉴于这种设计,在早期 Windows 版本中,字体在基于 GDI 的应用程序中可用,但在 DirectWrite 应用程序中不可用。 从 Windows 10 周年更新开始,此类实用工具加载的字体也将在 DirectWrite 和 GDI 中可用。
通过调用IDWriteFactory::GetSystemFontCollection方法获取的系统字体集合中可以看到字体服务实用工具加载的字体。 由于字体服务通常遵循每用户许可模型,因此这些实用工具加载的字体基于每个用户进行管理。 因此,现有的 DirectWrite 应用程序可以利用最终用户使用此类服务获得的字体,无需在应用程序中进行任何代码更改,从而为用户提供更无缝的体验。
支持使用 CFF 轮廓的 OpenType 集合
OpenType 和 TrueType 字体格式长期以来一直支持将多个字体打包在单个字体文件中的功能(称为“字体集合”)。 OpenType 规范始终允许字体对字形轮廓数据使用 TrueType 或 CFF 格式。 但是,直到最近,该规范只允许字形轮廓使用 TrueType 格式的集合。 OpenType 版本 1.7 现在允许集合对字形轮廓数据使用 TrueType 或 CFF 格式。 从 Windows 10 周年更新开始,DirectWrite 将支持使用 CFF 轮廓数据的 OpenType 集合。
Windows 10
Windows 字体服务集成
从 Windows 10 开始,Windows 附带的字体可在联机服务中使用,可通过任何 Windows 10 设备上的 DirectWrite 访问。 这适用于所有 Windows 10 版本。 这允许应用程序使用任何 Windows 字体显示内容,即使当前未在设备上安装字体。
对 DirectWrite 字体服务机制的支持已在 XAML 框架中实现,这意味着使用 XAML 的任何应用程序都无需更改代码以利用字体服务。 可下载字体 (XAML) 代码示例演示了这一点。 直接调用 DirectWrite API 的应用程序需要使用新 API 利用字体服务机制。 有关详情,请参阅以下主题:
- IDWriteFactory3::GetSystemFontCollection方法
- IDWriteTextLayout3界面
- IDWriteFontDownloadQueue界面
- IDWriteFontDownloadListener界面
可下载字体 (DirectWrite) 代码示例演示了如何使用多个新 API。
字体集 API
DirectWrite 的字体集合界面提供了字体集合的视图,这些字体按字体系列组织,使用粗细、拉伸和样式作为子系列属性。 在内部,DirectWrite 使用具有各种属性的字体简单列表实现字体集合界面。 这种方法更灵活,因为它可以支持粗细/拉伸/样式系列枚举,但也支持使用其他字体属性进行查询和筛选。
在 Windows 10 中,这一更灵活的字体处理机制通过 IDWriteFontSet 和相关 API 提供给应用程序。 例如,可以使用字体集 API 创建自定义字体选取器用户界面,利用自定义字体集中的应用程序自定义字体属性。
有关详情,请参阅以下主题:
- IDWriteFontSet界面
- IDWriteFontSetBuilder界面
- DWRITE_FONT_PROPERTY_ID枚举
- IDWriteFontFactory3::GetSystemFontSet方法
新的文本布局行距模式
DirectWrite 的文本格式和文本布局界面支持新的行距模式。 在早期版本中,DirectWrite 的文本布局实现允许行距,其中每行的高度根据行中的最高项自动设置(“默认”模式),或者其中所有行都设置为应用程序确定的统一高度(“统一”模式)。 在 Windows 10 中,支持额外的“成比例”行距模式,为应用程序提供更多行距行为选项。 有关详情,请参阅以下主题:
- IDWriteTextLayout3界面
- IDWriteTextLayout3::SetLineSpacing方法
- DWRITE_LINE_SPACING结构
- DWRITE_LINE_SPACING_METHOD枚举
- DWRITE_FONT_LINE_GAP_USAGE枚举
- IDWriteTextLayout3::GetLineMetrics方法
- DWRITE_LINE_METRICS1结构
行距 (DirectWrite) 代码示例演示了如何使用多个新 API,并提供所有不同行距模式的可视化效果,以便更轻松地了解可用的各种行距选项。
GDI 互操作
自 Windows 7 中引入以来,DirectWrite 为最初使用 GDI 的字体模型、文本布局和呈现实现的应用程序提供了迁移路径。 这通过 [[IDWriteGdiInterop]] 界面提供。 在 Windows 10 中,其他 API 提供额外的 GDI 互操作功能。 有关其他信息,请参阅以下主题:
Windows 8.1
呈现颜色字体
从 Windows 8.1 开始,DirectWrite 提供对颜色字体的支持。 Direct2D(将 DirectWrite 用于文本呈现)添加了枚举值D2D1_DRAW_TEXT_OPTIONS_ENABLE_COLOR_FONT,以在绘制文本时启用此功能。 有关详情,请参阅以下主题:
Windows 8
新工厂界面IDWriteFactory1,用于创建可用的其他界面。
其他字体属性,例如:上标/下标、插入符号斜率、PANOSE 和 Unicode 范围。
间距改进,例如:控制字符间距、旧字距对和对齐。 有关详细信息,请参阅对齐、字距和间距主题。
改进了呈现目标和参数。
文本复杂性分析改进。
新脚本属性、新脚本支持 (Unicode 6)、字体回退新增功能、配对括号和 bidi 扩充。
字体缓存性能增强。 从 Windows 8 开始,字体缓存是全局的,在计算机启动时启动。
新的呈现模式。
从 Windows 8 开始,DirectWrite支持许多功能,可帮助制作面向全球市场的应用。
下面几个区域可帮助实现可为全球客户定制的富文本应用。
中文、日文和韩文扩展 C & D
每隔几年,Unicode 联盟就会发布一份中文、日文和韩文统一表意文字块的标准化补充列表。 使用 Unicode 6.0 修订版,他们已发布扩展块 C 和 D。可以在 Unicode 网站扩展 C和扩展 D上找到这些表意文字。
从 Windows 8 开始,DirectWrite支持这些标准化 CJK 表意文字的新块的 Unicode 代码点,因此可以在 DirectWrite 应用中使用它们。
印度卢比符号
2005 年 3 月,印度政府宣布开展竞赛,为卢比货币选择一个符号。 经过激烈的竞争,在 2010 年 7 月 15 日,印度政府选择了 D.Udaya Kumar 创作的设计,DirectWrite包含对与该符号绑定的 Unicode 代码点的支持。 因此,DirectWrite 应用现在支持此货币符号。
表情
DirectWrite现在支持在应用中使用表情符号。 如果试图呈现表情符号表意文字,之前版本的 DirectWrite 会显示缺失的字形框。 从 Windows 8 开始,DirectWrite 支持与表情符号关联的 Unicode 代码块,因此,如果应用对表情符号使用 Unicode 标准代码点,它会显示相应的字形。
缅甸语、蒂夫纳语和古朝鲜语
从 Windows 8 开始,DirectWrite支持与缅甸语、蒂夫纳语和古朝鲜语中的字形对应的 Unicode 代码点块,因此可以创建包含这三种语言文本的应用。 除了支持这些字符之外,DirectWrite 还支持古朝鲜语处理换行的唯一方式。
新脚本
从 Windows 8 开始,GetScriptProperties方法返回许多新脚本的信息。 下面是DirectWrite在 Windows 8 及更高版本中支持的脚本列表。
- 阿维斯陀语
- 巴穆姆语
- 巴塔克语
- 婆罗米语
- 埃及象形文字
- 帝国阿拉姆语
- 钵罗婆文
- 钵罗婆文
- 爪哇文
- 凯提文
- 老傈僳文
- 曼达语
- 曼尼普尔文
- 古南阿拉伯语
- 古代突厥语(鄂尔浑河)
- 撒玛利亚语
- 老傣文
- 越南傣文