【问题标题】:Can I hardcode glyph indices in my code?我可以在我的代码中硬编码字形索引吗?
【发布时间】:2012-04-14 21:59:38
【问题描述】:

鉴于 Windows API 函数 GetGlyphIndices() 可以将 2 字节的 UNICODE 字符代码转换为字形索引,我打算硬编码这些字形索引,而不是 UNICODE 点。这可能吗?

我知道 MS 稍后可能会更改此函数为一个特定 UNICODE 点返回的值,但我希望在这种情况下,当前字形索引将保留在字形集中。

换句话说,我的理解是,如果 MS 决定将新的字形索引与 UNICODE 点相关联,它将扩大字形集以保留旧字形。

有人可以确认吗?

【问题讨论】:

  • 这种期望让程序员忙于维护他们的代码。像 Raymond 这样的人正忙于与 appcompat 作战。一种明显的故障模式是字体映射器生成替代字体,因为您希望使用的字体在机器上不可用。
  • @HansPassant 任何使用 OpenType 字体的程序都必须访问 OpenType 字体文件中的一些表,例如 GSUB、GPOS、cmap 等……这不仅仅是调用 @987654322 的问题@ 或 CreateFontIndirect()。因此,像这样的代码无法捕获源自替代字体的错误的可能性几乎为零。
  • 您可能希望在您的问题中更明显地表明您正在谈论 OpenType。虽然 Microsoft 对 appcompat 做出了相当坚定的承诺,但其他 OpenType 供应商不一定如此。
  • 打电话给GetGlyphIndices有问题吗?
  • @DavidHeffernan 一点也不。我的问题与 OpenType 字体的字形集中字形的持久性有关。我的信念是它是持久的,尽管在 MSDN 中显然没有说支持或反对这个假设。

标签: windows winapi unicode opentype


【解决方案1】:

不能保证总是附加新的字形。 (如果字形被删除怎么办?)

【讨论】:

  • 感谢您的回复。我有理由假设字形不会从字形集中删除。例如,字形 0x01B9、0x01BD、0x01C2 和 0x01CE,它们是圆符、卡隆、短音符和波浪号的字形变体,已被 Cambria Math 字体中的字形 0x1218、0x1219、0x121D 和 0x121A 所取代,但字形集中仍然存在旧字形。
  • 无法保证您所做的假设在未来仍然有效。风险自负,并确保您的客户了解风险。
  • 我理解你的担心,这也是我的。这就是我发布问题的原因。但我想在 MSDN 文档中查看您刚才所说的内容。你知道任何支持这一点的参考资料吗?
  • 你如何证明是否定的?如果找不到保证,则没有保证。
  • @user1042389:你指的是 Unicode 稳定性策略。 Unicode 是一种编码标准。它不保证字体文件内容的稳定性。正如 Raymond 所指出的,不能保证您今天使用的字体文件将来不会重新排列或删除其字形。如果您想保证未来的错误和难以维护的代码,那么在代码中硬编码 glyphID 是一个好主意。否则:不要这样做。
猜你喜欢
  • 1970-01-01
  • 2010-11-08
  • 2011-07-08
  • 2015-11-03
  • 2012-04-17
  • 1970-01-01
  • 2010-09-26
  • 2020-06-15
  • 1970-01-01
相关资源
最近更新 更多