Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 有没有更好的方法在.NET 2.0上反别名文本?_C#_.net_Winforms_Fonts - Fatal编程技术网

C# 有没有更好的方法在.NET 2.0上反别名文本?

C# 有没有更好的方法在.NET 2.0上反别名文本?,c#,.net,winforms,fonts,C#,.net,Winforms,Fonts,我想在这个屏幕截图上显示: 我已经尝试了所有的文本渲染提示,但看起来仍然很糟糕。请注意,当我拍摄屏幕截图时,PNG更平滑,但您仍然可以看到第二个文本不如第一个好。 这是我的密码: private void Form1_Paint(object sender, PaintEventArgs e) { try { SolidBrush solidBrush = new SolidBrush(Color.Black); PrivateFontCollectio

我想在这个屏幕截图上显示:

我已经尝试了所有的文本渲染提示,但看起来仍然很糟糕。请注意,当我拍摄屏幕截图时,PNG更平滑,但您仍然可以看到第二个文本不如第一个好。 这是我的密码:

private void Form1_Paint(object sender, PaintEventArgs e) {
    try {
        SolidBrush solidBrush = new SolidBrush(Color.Black);
        PrivateFontCollection fonts;
        FontFamily family = LoadFontFamily(Properties.Resources.SegoeWP_Light, out fonts);
        Font font = new Font(family, 18);
        e.Graphics.SmoothingMode = SmoothingMode.HighQuality;
        e.Graphics.TextRenderingHint = TextRenderingHint.SystemDefault;
        e.Graphics.DrawString("Downloads", font, solidBrush, new PointF(135, 80));
    } catch (Exception ex) {
        MessageBox.Show(ex.ToString());
    }
}

WinForms(.NET 2.0)上有没有其他平滑字体的方法?

我认为下面的内容就足够了

e.Graphics.TextRenderingHint = TextRenderingHint.AntiAlias;
如果没有,可以在不做任何更改的情况下尝试下面页面上的示例,然后逐渐添加您的更改,直到其中断


我相信Photoshop会进行过采样。你可能无法获得像Photoshop那样好的结果——它有更好的像素捕捉算法,而且它可能会稍微增加轮廓以获得更暗的结果——但是如果
SmoothingMode.AntiAlias
(正如George建议的)还不够,你可以尝试以下步骤,看看它们是否能得到你想要的结果

  • 创建一个新的
    字体
    ,其大小是您想要的字体的两倍
  • 使用较大字体测量文本,并创建该大小的
    位图。确保使用支持alpha透明度的格式创建它
  • 将文本绘制到
    位图中(在(0,0)处)。(您可能需要在此处使用
    SmoothingMode.AntiAlias
  • 位图
    绘制到最终目标,将其大小缩小50%。确保使用高质量的调整大小模式
  • 这将从示例图像中获得更多的“平滑”效果,因为您基本上是在绘制亚像素网格。但是,您的结果可能会有所不同——您可能需要在(0,1)而不是(0,0)处绘制,以使其看起来足够清晰,并且可能需要调整字体大小。你甚至可以试着用3倍而不是2倍来画图,但你不会从中得到太多的好处

    最大的问题是,你的文本可能不够暗——如果线条以2倍的大小以1像素宽绘制,那么最终结果只有50%的黑色。处理这一问题的最佳方法是选择线条较粗的字体。您也可以尝试在
    位图中过度绘制文本
    ——在(0,0)处绘制一次,然后在(0,1)或(1,0)处再次绘制一次,以查看这是否会使线条变粗,以便在缩小尺寸后看起来足够好看。你必须进行实验


    我不建议在通用文本绘图(用户选择布局和字体大小)中使用此选项,但如果您可以完全控制字体大小,您可能可以调整此选项以获得非常好的效果。

    我也遇到过同样的问题,但我不记得明确的解决方案,必须有负责GDI或GDI+绘制图形的属性。请改用TextRenderer.DrawText()。您还需要使用ClearType调谐器,第一次在Google上点击。@Hans Passant:DrawText()给了我一个粗体输出:正如我所说的:我已经尝试了所有的TextRendering提示,但它看起来仍然不好。对不起,看到了,当我重新阅读您的文章时,我用另一个建议对其进行了编辑,我认为这可能是您唯一的选择。