代码之家  ›  专栏  ›  技术社区  ›  Robert Vuković

WPF字体模糊问题-解决方案

  •  147
  • Robert Vuković  · 技术社区  · 16 年前

    以下链接描述并演示了问题:

    说明: Text Clarity in WPF . 此链接具有字体比较功能。

    • Microsoft Expression Blend中的深色背景
    • [link]
    • 嵌入windows窗体 [link]
    • 使用GDI+和/或Windows Forms TextRenderer类将文本渲染为位图,然后将该位图渲染为WPF控件。 [link]

    还有其他解决办法吗?

    This is going to be fixed in VS2010 (and WPF4) beta 2

    看来问题终于解决了!

    Scott Hanselman's ComputerZen.com: WPF and Text Blurriness, now with complete Clarity

    10 回复  |  直到 5 年前
        1
  •  132
  •   Helge Klein    8 年前

    NET4终于有了一个解决WPF糟糕的文本呈现质量的方法,但它隐藏得很好。为每个窗口设置以下内容:

    TextOptions.TextFormattingMode="Display"
    

    默认值为“理想”,与名称完全不同。

    TextOptions中还有两个其他选项,即TextHintingMode和TextRenderingMode,但它们都有合理的默认值。

        2
  •  109
  •   Community kfsone    8 年前

    windowsclient.net上的一个WPF文本程序管理器提供了一篇关于WPF文本呈现的深入文章: Text Clarity in WPF .

    问题归结为WPF需要线性缩放字体渲染器来平滑动画。另一方面,纯ClearType在字体上有相当大的自由度,可以将垂直词干推到下一个像素中。

    虽然我也不喜欢WPF的字体渲染特性,但我可以想象动画是否会像Winforms cascade中那样跳跃的喧嚣。

    玩注册表

    我特别感兴趣的是MSDN文章的链接“ ClearType Registry Settings “,它解释了注册表中可能的用户端调整:

    • ClearType级别:子像素暗示的数量
    • 伽马能级
    • 像素结构:显示像素中色条的排列方式
    • 文本对比度级别:调整字形词干的宽度,使字体更重

    使用这些设置并没有真正改善根本问题,但可以减少敏感用户的颜色溢出效应。

    另一种方法

    WPF 4.0

    WPF 4将改进对影响字体呈现的支持。有 an article on the WPF Text Blog

    text rendering comparison

    <抱怨>这对每个设计师来说都足够了/抱怨>

        3
  •  44
  •   Isak Savo    15 年前

    前几天,当我使用一个边界时遇到了一个问题 DropShadowEffect 应用结果是,该边界内的所有文本都非常模糊。不管文本是在其他面板内还是直接在边框下,任何文本块都是具有 Effect 他似乎受到了影响。

    这种特殊情况的解决方案是,不要将内容放在具有效果的边框内,而是使用网格(或任何其他支持将内容放在彼此顶部的内容)并将矩形放置在与文本相同的单元格中(即,作为视觉树中的同级),并将效果放在该单元格上。

    像这样:

    <!-- don't do this --->
    <Border>
         <Border.Effect>
              <DropShadowEffect BlurRadius="25" ShadowDepth="0" Opacity="1"/>
         </Border.Effect>
         <TextBlock Text="This Text Will Be Blurry" />
    </Border>
    
    <!-- Do this instead -->
    <Grid>
      <Rectangle>
         <Rectangle.Effect>
              <DropShadowEffect BlurRadius="25" ShadowDepth="0" Opacity="1"/>
         </Rectangle.Effect>
      </Rectangle>
      <TextBlock Text="This Text Will Be Crisp and Clear" />
    </Grid>
    
        4
  •  10
  •   Lennart    8 年前

    这将在VS2010(和WPF4)beta 2中修复:

        5
  •  7
  •   Rahil Wazir Joseph Daigle    10 年前

    我不认为这是一个bug,但是默认配置确实很烦人。这是一个比较的所有组合的

    TextOptions.TextRenderingMode
    TextOptions.TextFormattingMode
    RenderOptions.ClearTypeHint
    

    SnapToDevicePixels 在文本呈现中没有任何区别。

    http://i.stack.imgur.com/cS3S2.png

    TextOptions.TextRenderingMode="Auto"
    TextOptions.TextFormattingMode="Ideal"
    RenderOptions.ClearTypeHint="Auto"
    

    垂直线从不模糊的地方。

    对于那些使用Mahapps.Metro的人来说,问题在于 TransitioningContentControl https://github.com/MahApps/MahApps.Metro/issues/889

        6
  •  6
  •   Pavel Minaev Pavel Minaev    16 年前

    SnapToDevicePixels仅适用于WPF形状(线等),而不适用于文本渲染器。

    也看到 this 微软论坛上讨论这些问题的帖子——它已经收到了几封盖伊女士的回复,澄清了他们在这个问题上的立场。

        7
  •  6
  •   David Schmitt    15 年前

    从开发人员的角度来看,目前已知的唯一“解决方法”是使用GDI+和/或Windows Forms TextRenderer类将文本渲染为位图,然后将该位图渲染为WPF控件。除了明显的性能影响之外,这并不能缓解现有应用程序的问题。

    我现在创建了一个 Microsoft Connect ticket for this issue

        8
  •  4
  •   Orion Edwards    15 年前

    刚刚试用了VS2010测试版,它都是在WPF中完成的,它严重地受到字体模糊问题的困扰。特别是在工具提示上。

    这似乎提供了一些证据,证明WPF4实际上并不能解决问题(如果有更糟的情况的话)

        9
  •  4
  •   VVS    15 年前

    这些 registry settings (十进制)适用于我,最接近我的常规cleartype字体:

    • ClearTypeLevel:10(主要是灰度混叠)
    • GammaLevel:1300(较高的gamma使字体太薄,我看到了别名中的颜色)
        10
  •  3
  •   Inisheer    16 年前

    他们说“SnapToDevicePixels=true”有效,但我从未见过任何好的结果。

    很明显,这不是问题的解决方案,但我就是这样解决的。

        11
  •  0
  •   Edward Brey    5 年前

    如果您喜欢使用C#基类为您的应用自定义窗口(或者现在有理由这样做),以下是您如何设置文本格式以使用吸引人的显示模式:

    public class SnappyWindow : Window
    {
        public SnappyWindow()
        {
            SetValue(TextOptions.TextFormattingModeProperty, TextFormattingMode.Display);
        }
    }