DirectWrite的字形使得em方格具有特定的大小

时间:2014-05-25 22:11:25

标签: dpi direct2d em directwrite

我正在处理一个呈现音乐符号的应用程序。音乐符号在常规字体文件中指定,使用the convention表示em方块的高度对应于常规五行音乐人员的高度。例如,音符头的字形大约为0.25 em高,即两条线之间的距离。

在渲染时,我使用一个坐标系,其中4个单位对应于五行音乐人员的高度。因此,我需要渲染字形,使得em方形最终呈现4个单位高。但是,DirectWrite只允许在设备无关像素(DIP)中指定文本大小,而且我对如何在坐标系之间进行操作感到困惑。这有两个部分:

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

好的衡量标准:

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

1 个答案:

答案 0 :(得分:1)

经过一些实验和研究,我得出以下结论。

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

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