Aero:如何在Glass上绘制ClearType文本?

Ian*_*oyd 11 aero cleartype aero-glass

使用GDI +在玻璃上绘制文字:

graphics.DrawString(s, Length(s), font, MakePointF(x, y), brush);
Run Code Online (Sandbox Code Playgroud)

您会注意到启用ClearType的文本在玻璃上绘制得非常糟糕:

替代文字

但是当玻璃禁用时,文字当然画得很好:

替代文字

通过比较,这里是反别名字体平滑:

替代文字

这里没有字体平滑:

替代文字

注意:没有字体平滑看起来比实际更好,因为StackOverflow会调整显示器上的图像大小.

如何在玻璃上绘制ClearType文本?

笔记

  • Win32原生
  • 不是.NET(原生)
  • 不是Winforms(原生)
  • GDI +(原生)

Mark建议的是,你不能尊重用户对文本渲染的偏好(即" SystemDefault".ClearType不能在玻璃上起作用,你也不能使用它.

换句话说,如果您在玻璃上渲染,则必须使用以下方式覆盖文本渲染:

graphics.SetTextRenderingHint(TextRenderingHintAntiAliasGridFit);
Run Code Online (Sandbox Code Playgroud)

否则你应该保留TextRenderingHint它的默认值TextRenderingHintSystemDefault.

也可以看看

Mar*_*som 2

该问题是绘图执行方式所固有的。所有文本都绘制在黑色背景上,然后合成到玻璃背景上;半透明字体平滑与黑色相结合,形成接近黑色的效果。