【问题标题】:GDI+ draws letters bunched togetherGDI+ 绘制捆绑在一起的字母
【发布时间】:2012-02-17 01:01:28
【问题描述】:

我觉得我读过类似的问题但我找不到它,所以如果重复请关闭。

我正在尝试使用等宽字体 (Consolas) 使用 Graphics::DrawString 绘制文本。但是,当我绘制文本时,字母的间距不均匀。这是它的样子:

如您所见,字母被分成两个和三个一组。我读了this article,我认为我已经采取了足够的措施来避免它使用StringFormat::GenericTypographic,但显然不是。我也在使用TextRenderingHintClearTypeGridFit,因为所有其他人看起来都像垃圾(没有GridFit 部分就没有TextRenderingHintClearType)。

如何像所有其他使用等宽字体绘制文本的程序一样绘制文本以使其看起来正确?

【问题讨论】:

  • 这是 Graphics.DrawString() 的一个已知问题。这就是为什么 TextRenderer 类在 .NET 2.0 中可用的原因,它没有这个问题。
  • @HansPassant 我没有使用 .NET
  • 好吧,然后使用 DrawTextEx(),同样的事情。
  • @HansPassant 这是 GDI 的一部分,不是吗?它会做抗锯齿、cleartype 等所有功能吗?
  • 操作系统默认选择什么。是的。

标签: c++ fonts gdi+ typography kerning


【解决方案1】:

问题在于 GDI+ 使用不同的(并且早已被废弃的)系统来绘制文本。从 .NET 框架 2.0 开始,Microsoft 将所有控件更改为实际使用 GDI 进行文本呈现,而不是 GDI+。 GDI 中的文本渲染是硬件加速的,并且通过字符渲染、Uniscribe、连字继续得到改进。 GDI+ 中的文本渲染不是硬件加速的,也没有得到任何修复或改进。

GDI 也可以绘制抗锯齿,使用 CLEARTYPE_QUALITY 或 ANTIALIASED_QUALITY。

下面是对比

  • GDI+ (Graphics.DrawString)
  • GDI (TextRenderer.DrawText)

【讨论】:

    猜你喜欢
    • 2014-05-15
    • 2021-10-16
    • 2010-12-29
    • 1970-01-01
    • 2014-11-10
    • 2014-01-26
    • 2023-03-27
    • 2019-07-15
    • 2018-04-18
    相关资源
    最近更新 更多