如何使文字/标签流畅?

时间:2010-04-09 17:25:21

标签: c# winforms text label smoothing

有谁知道如何制作标签或文字更流畅?目前他们看起来很不稳定。由于我想使标签动态化,我不能只从Photoshop插入文本。

4 个答案:

答案 0 :(得分:15)

如果要对其进行反别名,则必须动态生成代表文本的图像。以下是msdn上的示例:http://msdn.microsoft.com/en-us/library/a619zh6z.aspx

编辑:编辑以下评论。

该链接描述了使用控件的OnPaint事件来使用不同的TextRenderingHint。如果你想要一些可以重复使用的东西你可以做的是创建一个扩展Label类的Custom Label类,并在你的表单中使用它:

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的新自定义控件(或任何您想要调用的自定义控件)并使用上面的代码。重建项目,然后您应该看到CustomLabel控件出现在顶部的工具箱中的“MyProject Components”类别下。在此自定义标签的属性窗格中,您将看到新的TextRenderingHint属性。将此设置为“AntiAlias”。在表单中添加另一个标签,并比较它们的外观。

如果要将其默认为AntiAlias,只需更改私有变量的默认值。

答案 1 :(得分:5)

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

<强>更新

您发布了an example问题。我magnified it to 400 %。显然,启用了ClearType子像素抗锯齿 。就个人而言,我不认为文字看起来像是锯齿状。如果您想要更高质量的屏幕文本,您可以购买具有更高物理分辨率(每英寸像素数)的屏幕,然后以(相应地)更大的尺寸绘制文本。然后文本将在屏幕上具有相同的大小,但看起来会更加流畅。

你也可以放弃ClearType并使用其他一些字体平滑算法,但这远非微不足道,因为ClearType是Windows上的 字体平滑系统。

更新2

如果您运行的是Windows 7,则可以微调ClearType。只需打开开始菜单,写下“ClearType”并启动指南。我认为Vista和XP也有指南,但默认情况下可能没有安装,但可以像PowerToys那样提供......

答案 2 :(得分:0)

确保您已启用ClearType

答案 3 :(得分:0)

安装MacType程序,它可以像MacOS一样平滑Windows字体,我不知道为什么Microsoft不修复其Windows平滑字体? 如果Microsoft修复了其字体,则无需安装第三方应用程序,例如Windows必备的程序。