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

时间:2010-12-14 04:29:20

标签: winapi text rotation gdi

我正在使用GDI将文本绘制到设备上下文中,我注意到如果角度正好是0,90,180或270,则字距调整或字符位置不同。一旦我将角度增加1 ,角色的位置明显不同。

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

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

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

以下是我的意思(Monotype Corsiva字体):

0度
0 degrees

1度
1 degree

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

1 个答案:

答案 0 :(得分:1)

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

  • 禁用(字体)AA,但这不会产生可接受的结果。
  • 为每个可能的角度创建字体句柄,并查看问题是否仍然存在。我认为它没有,但它不是一个漂亮的解决方案。
  • 将文本渲染为位图(例如,使用CreateCompatibleBitmap())将文本渲染到其中,然后渲染旋转的位图。这取决于您需要不同旋转/不同文本的频率。
  • fdwOutputPrecision中使用fdwQualityCreateFont()进行游戏。这可能是最简单的解决方案,但你必须尝试一下我猜。

HTH