WPF字体质量

Posted

技术标签:

【中文标题】WPF字体质量【英文标题】:WPF font quality 【发布时间】:2012-10-19 18:02:13 【问题描述】:

我正在开发一个 WPF 应用程序,但我注意到在某些字体大小下,文本的呈现效果不如您在控制面板 -> 字体中看到的示例。我正在使用大的 Segoe UI 字体 (FontSize="36"),效果在直立线条上更明显,例如字母“U”的一侧可能比另一侧稍厚。 )。

字体质量在某些字体大小下有所提高,例如FontSize="48"(我认为相当于 36pt),但使用有限数量的字体大小并不总是可行的。

我可以通过将以下属性应用于 TextBlock 来提高字体质量:-

TextOptions.TextFormattingMode="Display" TextOptions.TextRenderingMode="ClearType"

鉴于质量的提高,我很想知道为什么 WPF 不对所有文本执行此操作,还是因为性能问题?我正在考虑创建一种全局样式以将其应用于所有控件,否则会导致问题吗?

(我尝试上传屏幕截图,但必须以低质量存储图像,并且您无法真正找出字体问题。

【问题讨论】:

我们不会(imgur 不会)以低质量存储图像。如果您保存 PNG 并上传它,它不会变成 JPEG。您还可以在此处从按比例缩小的图片链接到全尺寸图片。 你试过用其他字体吗? 我相信这个问题,包括为什么默认的 WPF 字体渲染是“模糊”的,在***.com/questions/190344/… 中得到了充分的回答 【参考方案1】:

我注意到在启用 ClearType 时处理大量数据(超过 10,000 个项目)时出现的小性能问题。将 TextFormattingMode 更改为 Display 对性能没有明显影响。

也就是说,在我所有的 WPF 应用程序中,我都使用全局样式来改进文本呈现,除非性能影响大到足以使 UI 感觉粘滞。

【讨论】:

【参考方案2】:

这是 WPF 文本团队写的关于此功能的 blog post。

TextFormattingMode 的注意事项:

理想 理想的文本指标是已用于 自引入 WPF 以来的格式文本。这些指标导致 字形的形状与它们的轮廓保持高保真度 字体文件。字形的最终位置不被考虑在内 创建字形位图或相对于每个定位字形 其他。

显示 在这种新的格式化模式中,WPF 使用 GDI 兼容的文本指标。这确保了每个字形的宽度为 多个整像素,并且定位在整像素上。指某东西的用途 GDI 兼容的文本度量也意味着字形大小和行 Break 类似于基于 GDI 的框架。也就是说,字形大小 不是 WPF 使用的换行算法的唯一输入。 即使我们使用与 GDI 相同的指标,我们的换行也不会 完全一样。

由于这些属性在 .NET 4.0 中是新的,因此它们将原始 WPF 算法保留为默认值,即理想模式。

对于TextRenderingMode

Auto 除非系统设置已完成,否则此模式将使用 ClearType 设置为专门禁用机器上的 ClearType。

锯齿不会使用抗锯齿来绘制文本。

灰度 灰度抗锯齿将用于绘制 文本。

ClearType ClearType 抗锯齿将用于绘制文本。

由于Auto 是默认值,您通常会得到ClearType 渲染。

现在,因为这些是附加属性,并且它们继承,您可以将它们设置在根Window。无需创建一堆Styles。

【讨论】:

修改这些属性是否对性能有任何影响,可能是由于更复杂的算法?另外,我想知道修改这些属性是否还有其他缺点或缺点。 WPF 团队中没有一个人提到过使用不同渲染模式的性能损失,所以我会说如果有性能损失,可以忽略不计。至于缺点,我认为主要的缺点是 ClearType。例如,它在 CRT 显示器上效果不佳。

以上是关于WPF字体质量的主要内容,如果未能解决你的问题,请参考以下文章

wpfwindow.show字体不显示

WPF - 按字体名称访问 Roboto 字体时出现问题

WPF添加自定义字体

求wpf字体设置控件。

关于WPF字体的小问题

如何从 C# WPF 中的嵌入字体将字体文件添加到 Stimulsoft 报告