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

Cox*_*oxy 5 forms windows antialiasing winforms

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

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

这是界面模型与屏幕渲染相比的图片: 在此输入图像描述

不幸的是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));
}
Run Code Online (Sandbox Code Playgroud)

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

Par*_*ice 2

您可以在 .NET 中使用透明标签。
查看 CodeProject 上的这篇关于如何在 Windows 窗体中使用透明图像和标签的文章

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

当您不使用本机字体大小时, Windows/.NET/GDI+ 将尝试为您缩放字体。这种缩放很可能会导致您的问题。