Winapi 使用Win32 TextOut以一定角度绘制文本

Winapi 使用Win32 TextOut以一定角度绘制文本,winapi,text,rotation,gdi,Winapi,Text,Rotation,Gdi,我正在使用GDI在设备上下文上绘制文本,我注意到如果角度正好为0、90、180或270,紧排或字符放置是不同的。只要我将角度增加1,角色的位置就会明显不同 我使用ModifyWorldTransform转换设备上下文的世界坐标,然后使用TextOut将文本绘制到设备上下文上,而不是使用角度创建HFONT 我认为当文本以90度的倍数精确绘制时,GDI使用的是字体提示或其他一些特殊技术,而不是任何其他角度 有没有办法禁用此暗示,以便以0度渲染的文本与以1度渲染的文本没有显著差异 以下是我的意思示例(

我正在使用GDI在设备上下文上绘制文本,我注意到如果角度正好为0、90、180或270,紧排或字符放置是不同的。只要我将角度增加1,角色的位置就会明显不同

我使用
ModifyWorldTransform
转换设备上下文的世界坐标,然后使用
TextOut
将文本绘制到设备上下文上,而不是使用角度创建
HFONT

我认为当文本以90度的倍数精确绘制时,GDI使用的是字体提示或其他一些特殊技术,而不是任何其他角度

有没有办法禁用此暗示,以便以0度渲染的文本与以1度渲染的文本没有显著差异

以下是我的意思示例(单字Corsiva字体):

0度

1度


对于某些字体,例如Arial或Tahoma,它没有那么明显,但我想完全消除这种差异,即使这意味着文本没有尽可能地呈现出来。

我认为这是由于抗锯齿而不是字体提示。您可以尝试以下方法:

  • 禁用(字体)AA,但这不会产生可接受的结果
  • 为每个可能的角度创建字体句柄,并查看问题是否仍然存在。我想不会,但这不是一个很好的解决方案
  • 将文本渲染为位图(例如,使用
    CreateCompatibleBitmap()
    )将文本渲染为位图,然后渲染旋转的位图。这取决于需要不同旋转/不同文本的频率
  • CreateFont()
    中使用
    fdwutprecision
    fdwQuality
    。这可能是最简单的解决方案,但我想你必须做一点实验

hth

谢谢你的想法,但不幸的是,即使我禁用AA,结果也是一样的(除了文本没有抗锯齿)。如果我摆弄CreateFont的精度/质量,结果也不会改变:(我想我现在只能忍受它,并在it管理层要求时修复它。