如何使用ExtTextOut在位图上创建抗锯齿文本

本文关键字:文本 创建 何使用 ExtTextOut 位图 | 更新日期: 2023-09-27 18:23:58

在我的WinForm应用程序中,我绘制成System.Drawing.Bitmap。我从LOGFONT创建字体,并使用GDI函数ExtTextOutW绘制。然而,产出却很糟糕。它有严重的锯齿,看起来像是LSD上的抗锯齿。阅读这篇文章似乎是一个常见的问题——有解决方案吗?

如果我使用:

lf.lfQuality = FontQuality.NONANTIALIASED_QUALITY

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

有没有一种方法可以用ExtTextOutW在位图中创建平滑文本?

如何使用ExtTextOut在位图上创建抗锯齿文本

这是可能的,但有点棘手,因为它不能有透明的背景。您需要:

  1. 在内存中创建与显示设备上下文兼容的位图缓冲区(IntPtr.Zero句柄)
  2. 用纯色或其他背景填充缓冲区背景
  3. 将文本渲染到内存位图中
  4. 从内存中位图复制到图像设备上下文(BitBlt)

有关更多详细信息,请参阅GDI文本渲染到图像。