0

我正在开发一个呈现音乐符号的应用程序。音乐符号在常规字体文件中指定,它们使用的约定是 em 方格的高度对应于常规五行乐谱的高度。例如,音符头的字形大约 0.25 em 高,即五线谱两行之间的距离。

在渲染方面,我使用了一个坐标系,其中 4 个单位对应于五线谱表的高度。因此,我需要渲染字形以使 em 方格最终呈现 4 个单位高。但是 DirectWrite 只允许在设备独立像素 (DIP) 中指定文本大小,我对如何在坐标系之间进行调整感到困惑。这有两个部分:

  • 从 DIP 中给定的字体大小,我可以计算物理像素的高度,但是映射到该高度的是什么?em square 还是其他一些设计空间度量?
  • 如果我使用一些任意变换矩阵怎么办?如何指定 DIP 以便在我使用的坐标系中获得有意义的值?

为了更好的衡量:

  • 如果让它工作,这是否会弄乱字体提示,因为我的 DIP 值与物理像素没有明确的关系?
4

1 回答 1

2

经过更多的实验和研究,我得出以下结论。

  • 字体大小指定绘制的 EM 正方形的大小。在 12 个 DIP 处绘制意味着 EM 正方形被缩放以使用 12 个 DIP 的垂直空间。
  • layoutRect函数参数的顶部 Y 坐标ID2D1RenderTarget::DrawText映射到字体上升的顶部(对于第一行文本)。
  • 单位矩阵给出了一个坐标系,其中 (0, 0) 是左上角, (width, height),从 检索ID2D1RenderTarget::GetSize,是右下角,以 DIP 为单位。这意味着对于任何转换矩阵,字体大小单位应与渲染目标坐标系中的单位匹配,并且 42 个单位的垂直线将与字体大小为 42 个单位的 EM 正方形一样高。

但是,我无法找到有关任意转换对字体提示的影响的信息。

于 2014-05-29T14:32:10.330 回答