【问题标题】:Why do my Windows Forms strings look so ugly when anti-aliased?为什么我的 Windows 窗体字符串在抗锯齿后看起来如此难看?
【发布时间】:2010-12-06 05:56:57
【问题描述】:

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

无论我尝试哪种渲染模式,我都无法让字符串看起来很好(即它们会出现在 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));
}

我尝试将 TextRenderingHint 依次更改为每个选项,但无论我尝试什么,如果有任何抗锯齿功能,它就会像屏幕截图中那样呈现模糊、模糊的混乱状态。有什么想法吗?

【问题讨论】:

  • 我使用了具有透明背景的标签。将标签的 BackColor 属性设置为透明时遇到过什么样的问题?
  • 将 BackColour 设置为透明只会给我一个灰色背景,显然这是由于标签总是拾取其父控件的背景。 ParmesanCodice 在他的评论中的链接显示了类似的现象。
  • 很奇怪。我想我只使用从绘制自己背景的表单派生的表单来完成此操作,因此从技术上讲,标签正在获取其父级的背景,看起来还不错。

标签: windows winforms forms antialiasing


【解决方案1】:

您可以在 .NET 中使用透明标签。
How to Use Transparent Images and Labels in Windows Forms上查看这篇关于 CodeProject 的文章

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

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

【讨论】:

  • 感谢您的信息,但 Calibri 在 10 pt 的 Word 中看起来不错,但在 12 pt 的我的应用程序中仍然很难看。作为一种真正的字体,它应该能够以任何尺寸呈现而不会变得丑陋,就像在我的模型中一样。
  • 是的,我理解你的沮丧。我们在富文本框中使用 Courier New(也是一种真正的字体)也遇到了类似的问题。你试过12号的吗?还要记住,Word/Photo Shop/etc 在调整字体大小时很有可能更“利落”……
  • 是的,我确实在我的应用程序中尝试了 12 pt 的大小。我想一定是 ClearType 的问题。
猜你喜欢
  • 1970-01-01
  • 2012-01-22
  • 2013-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-07
  • 1970-01-01
相关资源
最近更新 更多