【问题标题】:WPF Anti aliasing workaroundWPF 抗锯齿解决方法
【发布时间】:2010-09-06 12:36:43
【问题描述】:

WPF 中的抗锯齿 cannot be turned off。但是我想在 WPF 字体很小的时候消除它们的模糊外观。

一种可能性是使用 .net 2.0 组件。这看起来会失去透明度功能和混合支持。不过没试过。

有人对此有解决方案吗?有什么缺点吗?

谢谢

【问题讨论】:

    标签: .net wpf


    【解决方案1】:

    您是否尝试过在 WPF 窗口/控件上放置 WindowsFormsHost 控件?这将允许 WPF 呈现 WinForms 控件。

    2012 年 11 月更新:这个问题和答案已有 4 年历史。 Text rendering has since improved in WPF。请不要将 WinForms 控件放在 WPF 应用程序中;这是修复字体渲染的一种骇人听闻的方式。它不再需要。

    【讨论】:

    • 这个答案充分说明了 WPF 的当前状态。让我们希望它在 VS2010 中有所改进。 ;)
    • 是的,但是这个问题已经超过 4 年了。从那以后情况有所改善,尤其是 WPF 字体渲染:blogs.msdn.com/b/text/archive/2009/08/24/…
    【解决方案2】:

    尝试在窗口的 UI 元素上使用 UIElement.SnapsToDevicePixels 属性。人们倾向于报告它最适合graphics and lines,但我注意到它在文本渲染方面也有所改进。

    【讨论】:

    • 如果在两个相同的文本之间进行直接比较,并且在 SnapsToDevicePixel 设置中找不到任何差异。此外,从“模糊”背后的技术原因来看,我无法想象这会有什么帮助。
    【解决方案3】:

    SnapsToDevicePixels 对文本渲染绝对没有影响。

    【讨论】:

      【解决方案4】:

      将您绘制的不希望抗锯齿的对象偏移 0.5 像素。这将导致绘图引擎在实际像素上绘制,而不是在像素的边缘上绘制(这是默认设置)。在像素边缘绘制时,抗锯齿通常发生在周围像素上。

      这类似于 Mac 上的 Quarts 绘图。

      编辑:对不起,我没有阅读这个问题。这不适用于字体,仅适用于形状。不过,我会在此处留下评论以供参考。

      【讨论】:

        【解决方案5】:

        微软在这里有一个专门讨论 WPF 中文本渲染的博客 WPF Text Blog

        .NET 4.0 中的情况确实得到了改进。

        【讨论】:

          【解决方案6】:

          可以使用以下选项从 WPF 4.0 开始关闭 Anti-Alias:

          TextOptions.TextFormattingMode="Display"
          

          【讨论】:

          • 那其实是没有关闭Anti-Aliasing。这是抗锯齿设置的一个不同的、更清晰的版本。 Aliased 选项是 TextOptions.TextRenderingMode="Aliased"
          猜你喜欢
          • 2014-02-18
          • 1970-01-01
          • 2012-10-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-12-30
          相关资源
          最近更新 更多