【问题标题】:Is there a way to render a SDL2 font as monospaced?有没有办法将 SDL2 字体呈现为等宽字体?
【发布时间】:2021-01-05 16:18:19
【问题描述】:

我的项目是秒表,非等宽字体会因为运行时字符大小的差异而抖动。我试过font.set_hinting(sdl2::ttf::Hinting::Mono);,但它似乎没有做任何事情。

【问题讨论】:

  • 提示只是稍微调整符号的形状(单提示特别应该在禁用抗锯齿的情况下改善它们的外观;这里单表示单色,而不是等宽)。最简单的解决方案是以您想要的任何间距分别绘制每个数字。您还可以编辑您的字体(例如使用 FontForge)以使其等宽。
  • 您可以尝试在打开的字体指针上通过TTF_SetFontKerning 禁用字距调整。这只有在渲染完整的字符串而不是单个字形时才有效(如果有的话)。
  • 完美! set_kerning 适用于常规文本,但轮廓仍然存在问题,因为宽度与普通字符不同
  • @MarkBenningfield(您可能想将其发布为答案。)

标签: rust sdl-2


【解决方案1】:

简短的回答是,要将字体呈现为固定宽度(等宽),请使用固定宽度字体!固定宽度或可变宽度是字体的属性,而不是渲染器。

但是,如果您使用打开的字体指针调用 TTF_SetFontKerning 来禁用字距调整,

TTF_SetFontKerning(font, 0);

渲染器将在字符串中的字符之间使用固定间距。请注意,这只适用于渲染完整的字符串,而不是单个字形。

根据实际使用的字体中的字形,结果看起来从可以接受到非常糟糕。

【讨论】:

  • 禁用字距调整不会使字体等宽。它可能适用于某些字符的某些特定字体,但我不会指望它。
  • @HolyBlackCat:我同意。这就是第一句话的重点。
  • 您可以做的是(@HolyBlackCat 所说的)并绘制每个单独的字符,这将使您能够区分每个字符矩形。但是,为此,将每个字符绘制到屏幕上会很慢,因此您应该先将它们加载到单个纹理中,然后再进行绘制。
  • 是的,如果我们最终使用轮廓,这可能就是我们最终会追求的目标
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-01
  • 1970-01-01
  • 2011-03-14
  • 1970-01-01
  • 2013-01-09
  • 2020-12-17
  • 1970-01-01
相关资源
最近更新 更多