【问题标题】:How to get real text dimensions when ClearType is on?当 ClearType 开启时如何获得真实的文本尺寸?
【发布时间】:2010-11-18 14:19:29
【问题描述】:

我有一个使用 GDI 的 Win32 GUI 应用程序。它需要在指定坐标的位图上绘制文本,然后将其擦除并替换为原始位图。

我按如下方式进行:

  • 选择字体(GetStockObject(DEFAULT_GUI_FONT))、画笔、其他东西到设备上下文中
  • 调用 GetTextExtentPoint32() 计算文本大小
  • 现在有了文本起点,我可以计算预期的文本矩形并将其存储
  • 为具有相同起点和相同文本的相同设备上下文调用 TextOut()

稍后恢复存储矩形的位图。

当 ClearType 抗锯齿关闭时,它可以正常工作。但是使用 ClearType 时 GetTextExtentPoint32() 返回的大小略小于调用 TextOut() 时文本实际占用的大小。因此,当我稍后恢复原始位图时,文本的一些小条纹仍然存在,并且我有伪影。

在不禁用 ClearType 的情况下是否有任何解决方法?

【问题讨论】:

    标签: windows winapi cleartype


    【解决方案1】:

    您也可以尝试DrawText 与 DT_CALCRECT 来计算字符串大小。也许效果更好。

    你也可以用 DrawText 在一个矩形内写入字符串,其大小等于你用 DT_CALCRECT 得到的大小,它会剪切文本以防它有点大。

    【讨论】:

    • 使用 DrawText 两次 - 第一次用于大小计算,然后用于绘图工作正常,文本没有变宽。谢谢。
    • 缺点是DrawText只支持零转义和零方向的字体。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-07
    相关资源
    最近更新 更多