为什么我的Windows窗体字符串在消除锯齿时看起来如此丑陋?

时间:2009-10-13 08:38:45

标签: windows winforms forms antialiasing

我在GraphicsBox上手动渲染一些字符串,因为你不能拥有带有透明背景的Label。

无论我尝试哪种渲染模式,我都无法让字符串看起来任何好处(即,它们会出现在Word或图形程序中。

这是界面模型与屏幕渲染相比的图片: enter image description here

不幸的是,StackOverflow似乎缩小了图片,所以这里也是一个直接链接:http://i.stack.imgur.com/vYFaF.png

以下是用于渲染的代码:

private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
  Graphics labelDrawing = e.Graphics;
  labelDrawing.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAliasGridFit;

  labelDrawing.DrawString("Setup Progress", new Font("Calibri", 10, FontStyle.Bold, GraphicsUnit.Point, 0), new SolidBrush(Color.Black), new Point(12, 9));
  labelDrawing.DrawString("The following components are being configured.", new Font("Calibri", 10, FontStyle.Regular, GraphicsUnit.Point, 0), new SolidBrush(Color.Black), new Point(24, 27));
}

我已经尝试将TextRenderingHint依次更改为每个选项,但无论我尝试什么,如果有任何抗锯齿,那么它就会出现模糊,模糊的混乱,如截图中所示。有什么想法吗?

1 个答案:

答案 0 :(得分:2)

您可以在.NET中使用透明标签 在How to Use Transparent Images and Labels in Windows Forms

上查看有关CodeProject的这篇文章

至于您的绘图问题 Calibri 没有10的原生字体大小。您可以在控制面板 - >字体中验证这一点。最小的原生字体大小为12(至少在我的机器上)。将你从大小改为12,你会发现它好多了。

如果您不使用本地字体某处,Windows / .NET / GDI +将尝试为您缩放字体。这种缩放最有可能导致您的问题。