【问题标题】:Using Win32 TextOut to draw text at an angle使用 Win32 TextOut 以一定角度绘制文本
【发布时间】:2011-05-25 01:35:40
【问题描述】:

我正在使用 GDI 将文本绘制到设备上下文中,我注意到如果角度正好是 0、90、180 或 270,那么字距调整或字符位置会有所不同。只要我将角度增加 1 ,字符位置明显不同。

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

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

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

这是我的意思的一个例子(Monotype Corsiva 字体):

0度

1度

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

【问题讨论】:

    标签: winapi text rotation gdi


    【解决方案1】:

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

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

    【讨论】:

    • 感谢您的想法,但不幸的是,即使我禁用 AA,结果也是一样的(除了文本没有抗锯齿)。如果我摆弄 CreateFont 的精度/质量,它也不会改变结果 :( 我想我现在只需要忍受它,并在管理层要求我时修复它。
    猜你喜欢
    • 2011-03-22
    • 2014-03-29
    • 2010-09-19
    • 2016-07-20
    • 1970-01-01
    • 2011-02-04
    • 2015-12-01
    • 1970-01-01
    相关资源
    最近更新 更多