代码之家  ›  专栏  ›  技术社区  ›  Joey Morani

如何使文本/标签平滑?

  •  5
  • Joey Morani  · 技术社区  · 15 年前

    有人知道如何使标签或文本更平滑吗?目前,它们看起来很参差不齐。因为我想使标签动态化,所以我不能只插入photoshop中的文本。

    4 回复  |  直到 6 年前
        1
  •  15
  •   Laurel Enrique    8 年前

    如果您想消除对文本的别名,就必须动态地生成表示文本的图像。以下是有关msdn的示例: http://msdn.microsoft.com/en-us/library/a619zh6z.aspx

    编辑:按下面的注释编辑。

    该链接描述如何使用控件的OnPaint事件来使用不同的textrenderinghint。如果您想要一些更可重用的东西,您可以创建一个扩展标签类的自定义标签类,并在表单中使用它:

    public partial class CustomLabel : Label
    {
        private TextRenderingHint _hint = TextRenderingHint.SystemDefault;   
        public TextRenderingHint TextRenderingHint
        {
            get { return this._hint; }
            set { this._hint = value; }
        }        
    
        protected override void OnPaint(PaintEventArgs pe)
        {            
            pe.Graphics.TextRenderingHint = TextRenderingHint;
            base.OnPaint(pe);
        }
    }
    

    添加一个名为CustomLabel的新自定义控件(或您想调用的任何控件),并使用上面的代码。重新生成项目,然后您应该看到自定义标签控件出现在工具箱顶部的“MyProject组件”类别下。在这个自定义标签的属性窗格中,您将看到新的textfrenderinghint属性。将其设置为“Antialias”。在表单中添加另一个标签并比较它们的外观。

    如果您想将其默认为Antialias,只需更改私有变量的默认值。

        2
  •  5
  •   Andreas Rejbrand    15 年前

    你指的是ClearType吗?然后 ClearType 必须在Windows中启用,并且必须使用现代字体,如Tahoma或Segoe UI,而不是MS Sans-serif。

    更新

    你发布了 an example 关于这个问题。我 magnified it to 400 % . 清楚地清除类型子像素抗锯齿 启用。就我个人而言,我不认为文字看起来参差不齐。如果你想要更高质量的屏幕文本,你可以买一个具有更高物理分辨率(每英寸像素)的屏幕,然后以(相应的)更大的尺寸绘制文本。然后,屏幕上的文本将具有相同的大小,但看起来更平滑。

    您也可以放弃ClearType并使用其他一些字体平滑算法,但这并不简单,因为ClearType是 这个 Windows上的字体平滑系统。

    更新2

    如果运行的是Windows7,则可以微调ClearType。只需打开“开始”菜单,输入“ClearType”并启动指南。我认为也有针对Vista和XP的指南,但在默认情况下可能没有安装,但可以作为电动玩具或类似的东西提供…

        3
  •  0
  •   xian    15 年前

    确保你有 ClearType 启用。

        4
  •  0
  •   Rebwar    6 年前

    安装MacType程序,它可以像MacOS一样平滑Windows字体,我不知道为什么微软不修复它的Windows平滑字体? 如果微软修正了它的字体,我不需要安装第三方应用程序来完成Windows的基本功能。