WPF字体质量

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

某些字体大小下,例如FontSize="48"(我相信这相当于36pt),字体质量会得到改善,但仅使用有限数量的字体大小并不总是切实可行。

我可以通过将以下属性应用于TextBlock来改善字体质量:

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

鉴于质量的提高,我很好奇为什么WPF不对所有文本进行这样的处理,是因为性能问题吗?我想创建一个全局样式来将其应用于所有控件,但这会造成问题吗?
(我尝试上传了一张截图,但SO必须以低质量存储图像,你无法真正看清字体问题)。

我们(imgur不会)不以低质量存储图像。如果您保存PNG并上传它,它不会变成JPEG。您还可以从此处的缩小版链接到全尺寸图像。 - BoltClock
你尝试过用其他字体吗? - MisterMetaphor
4
我相信这个问题,包括为什么默认的WPF字体渲染会“模糊”,在https://dev59.com/LXVC5IYBdhLWcg3wxEJ1中已经得到了充分回答。 - Dour High Arch
2个回答

13

这是WPF Text团队撰写的有关此功能的博客文章

对于TextFormattingMode

Ideal Ideal文本度量是自WPF引入以来用于格式化文本的度量标准。这些度量标准使得字形与其来自字体文件的轮廓保持高度一致性。在创建字形位图或相对于其他字形定位时,不考虑字形的最终位置。

Display 在这种新的格式化模式下,WPF使用GDI兼容的文本度量。这确保每个字形具有多个整像素宽度,并且定位在整像素上。使用GDI兼容文本度量还意味着字形大小和换行类似于基于GDI的框架。尽管我们使用与GDI相同的度量标准,但我们的换行算法不会完全相同。

由于这些属性是.NET 4.0中的新属性,因此默认情况下保留了原始的Ideal模式。

对于TextRenderingMode

Auto 此模式将使用ClearType,除非系统设置已在机器上明确禁用ClearType。

Aliased 不使用反锯齿绘制文本。

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

ClearType ClearType反走样将用于绘制文本。

由于Auto是默认值,因此通常会获得ClearType渲染方式。

现在,由于这些是附加属性,并且它们会继承,因此您可以只在根Window上设置它们。不需要创建一堆Style

1
修改这些属性是否会对性能产生影响,可能是由于更复杂的算法?此外,我想知道修改这些属性是否有其他缺点或不利因素。 - Adi Lester
3
WPF团队从未提及使用不同渲染模式会影响性能,因此我认为如果存在性能损失,那么它是可以忽略不计的。至于缺点,我认为主要是与ClearType有关,例如在CRT显示器上它无法良好运作。 - Abe Heidebrecht

0

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

尽管如此,在我所有的WPF应用程序中,我都使用全局样式来改善文本呈现,除非性能影响足够大以至于使UI感觉卡顿。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接