如何使用ExtTextOut在Bitmap上创建消除锯齿的文本?

时间:2013-07-19 09:57:52

标签: c# fonts bitmap gdi antialiasing

在我的WinForm应用程序中,我绘制了一个System.Drawing.Bitmap。我从LOGFONT创建字体并使用GDI函数ExtTextOutW绘制。然而输出很糟糕。它有很糟糕的锯齿状,看起来像是在LSD上使用antialiaser。阅读这个似乎是一个常见问题 - 是否有解决方案?

如果我使用:

lf.lfQuality = FontQuality.NONANTIALIASED_QUALITY

当我创建字体时,可怕的锯齿消失但当然没有抗锯齿。

有没有办法使用ExtTextOutW在Bitmap中创建平滑文本?

1 个答案:

答案 0 :(得分:1)

它可能但有点棘手,它不具备透明背景。 你需要:

  1. 创建与显示设备上下文兼容的内存位图缓冲区(IntPtr.Zero句柄)
  2. 使用纯色或其他背景填充缓冲区背景
  3. 将文本渲染到内存位图
  4. 从内存位图复制到图像设备上下文(BitBlt)
  5. 有关详细信息,请参阅GDI text rendering to image