wpf - 在 IE9 中禁用 Cleartype(文本抗锯齿)

标签 wpf internet-explorer-9 antialiasing cleartype directwrite

有据可查(例如 here ),IE9 忽略了操作系统范围的字体平滑设置(也称为抗锯齿)。即使在 Windows 中禁用字体平滑和 ClearType,IE 仍然显示抗锯齿字体,这使得一些用户难以阅读,尤其是在小字体时。

如何在 IE9 中禁用所有字体抗锯齿功能(ClearType 或其他)?

更多详细信息:

我们公司构建了一个使用大量小字体的网络应用程序。随着 IE9 的发布,我们的一些用户提示 IE9 的默认抗锯齿功能使我们的小字体变得模糊或模糊。因此,我们需要帮助已安装 IE9 并想要关闭抗锯齿功能的用户。

此外,就我个人而言,我在阅读小的抗锯齿字体时遇到困难,因此我想要一个供我自己使用的解决方案,即使对于我无法控制的网站也是如此。

在 IE8 中,我可以取消选中“始终对 HTML 使用 ClearType”,然后在操作系统中禁用 ClearType,IE8 将显示所有别名字体。但在IE9中,缺少这个选项。

经过对这个问题的一些研究,我了解到:核心问题是 IE 依赖 DirectWrite 进行文本渲染,并且不支持任何较新的渲染选项,这些选项将在没有抗锯齿的情况下绘制文本并尊重用户的操作系统范围的默认选择。

更糟糕的是,如果您在操作系统中禁用 ClearType,在某些情况下 IE 将回退到 DirectWrite 的默认非 ClearType 抗锯齿,该抗锯齿甚至比 ClearType 更模糊。

最佳答案

经过几天的搜索,我找到了一个MSDN Forums thread这向我指出了一个解决方案:http://www.softwareninjas.ca/dwrite-dll-wrapper

按照该页面上的说明操作,您将从 IE9 中删除抗锯齿功能(至少是 32 位版本的 IE,这是默认的 IE,甚至在 64 位 Windows 7 上也是如此)。到目前为止,我已经在 Win7 x64 笔记本电脑上对其进行了测试,并且运行完美。

非常感谢创建这个的 Olivier Dagenais。以下是他的解决方案如何工作的技术摘要。

这是一个两步过程。首先,您需要通过注册表项禁用 IE 中的 ClearType。这与以前版本的 IE 中可用的设置相同,但它已从 IE UI 中删除,因为它在 IE9 中停止工作。

[HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main]
"UseClearType"="no"

其次,现在 ClearType 被禁用,Windows 将回退到非 ClearType 抗锯齿解决方案。现在还需要禁用后备抗锯齿功能。引用上面的帖子:

What is left is the font smoothing (aka sub-pixel rendering), and that is the "blurring effect" you still see after turning cleartype off.

In case you were wondering, there is a way to turn that off too.

The method i used to turn off the sub-pixel wonder is to build a simple wrapper for dwrite.dll which intercepts and forwards calls to the real dwrite.dll, disabling font smoothing in the process.

You can download it from: http://www.softwareninjas.ca/dwrite-dll-wrapper

You can find the code at https://softwareninjas.kilnhg.com/Repo/Open-Source/Group/DWrite-dll-Wrapper

这是一个非常酷的黑客。跨 Windows 和 DirectX 版本可能有些脆弱,但目前可以解决这个问题,直到 Microsoft 齐心协力修复 IE 本身的潜在“无法禁用抗锯齿”问题。

它也适用于使用 IE WebBrowser 控件(又名 MSHTML)的应用程序,因此您可以逐个应用程序控制抗锯齿功能。它也适用于 HTML 帮助查看器。

请注意,IE9 标准模式下的文本质量并不理想。具体来说,小字体的字母有时会排列在一起,而它们之间通常没有一像素的空间。如果您以兼容模式呈现同一页面(或者您的站点使用非严格 DTD 或其他非标准执行 DTD),那么它看起来不错。因此,如果某些网站想要获得最佳的别名文本呈现效果,则需要执行额外的步骤:只需按 IE 工具栏中的兼容性按钮即可以兼容模式查看网站。

关于wpf - 在 IE9 中禁用 Cleartype(文本抗锯齿),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5427315/

相关文章:

javascript - ckeditor从正文获取光标

c++ - 离屏渲染 opengl 4.5 多采样 FBO

wPF VisualTreeHelper.GetParent 返回错误的类?

c# - 如何递增或循环遍历特定目录中的文件夹

C# 覆盖默认的 ContextMenu 样式 (WPF)

css - IE 8,9 z-index 错误

C# WPF 按钮点击

javascript - 模拟固定的正确位置

c++ - 如何解决 MFC 控件中的别名文本

java - Pixelart 的抗锯齿算法