我想在此屏幕截图中使用反别名:
我已经尝试了所有的TextRenderingHints,但它看起来仍然很糟糕。 请注意,当我执行屏幕截图时,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)上有平滑字体的不同方法吗?
答案 0 :(得分:4)
我相信Photoshop会过度采样。你可能无法获得比Photoshop更好的结果 - 它有更好的像素捕捉算法,它可能会做一些事情,比如稍微增加轮廓以获得更暗的结果 - 但是如果SmoothingMode.AntiAlias
(如乔治)建议)是不够的,您可以尝试这些步骤,看看他们是否得到了您想要的结果。
Font
,其大小是您最终想要的两倍。Bitmap
。确保使用支持Alpha透明度的格式创建它。Bitmap
(at(0,0))。 (你可能想在这里使用SmoothingMode.AntiAlias
。)Bitmap
绘制到最终目标,将其缩小50%。确保使用高质量的调整大小模式。这将为您的样本图像提供更多“平滑”效果,因为您基本上是绘制到子像素网格。但是,您的结果可能会有所不同 - 您可能需要绘制(0,1)而不是(0,0)以使其看起来足够清晰,并且您可能需要调整字体大小。你甚至可以尝试以3倍而不是2倍的速度进行绘制,但是你不会从远远超过那里获得很多好处。
最大的担忧是你的文字可能不够暗 - 如果线条在2倍大小的情况下以1像素宽度绘制,那么它们在最终结果中只会是50%黑色。处理此问题的最佳方法是选择较粗的字体。您也可以尝试透过Bitmap
中的文本 - 在(0,0)处绘制一次,然后再在(0,1)或(1,0)处绘制 - 以查看是否会使线条变粗一旦你缩小尺寸就看起来很好看。你必须进行实验。
我不建议将它用于通用文本绘图(用户选择布局和字体大小),但如果您可以完全控制字体大小,您可以调整它以获得相当好的效果结果
答案 1 :(得分:3)
我原以为以下就够了。
e.Graphics.TextRenderingHint = TextRenderingHint.AntiAlias;
如果没有,可以尝试下面页面上的示例而不做任何更改,然后逐渐添加您的更改,直到它发生故障。