如何在DirectWrite中获得倾斜字体的正确文本宽度?

时间:2017-02-12 16:39:46

标签: directwrite

我通过以下代码

创建一个IDWriteTextLayout对象
    hr = g_pDWriteFactory->CreateTextLayout(text, textLength, *g_pTextFormat, 200000000, 200000000, g_pTextLayout);

然后按文字指标

获取文字宽度
    DWRITE_TEXT_METRICS dtm;
    pTextLayout->GetMetrics(&dtm);
    float minHeight = dtm.height;
    float minWidth = dtm.widthIncludingTrailingWhitespace;

让我感到困惑的是,无论字体的样式是DWRITE_FONT_STYLE_OBLIQUE还是DWRITE_FONT_STYLE_NORMAL,相同字符串的宽度都是相同的值。为什么?我希望当字体样式为DWRITE_FONT_STYLE_OBLIQUE时,宽度应该更大。如何才能获得正确的倾斜文字宽度?

感谢。

1 个答案:

答案 0 :(得分:2)

布局指标基于字体设计指标,无论是否提示,而不是每个字形的实际墨盒。如果您希望指标更接近匹配,从而导致呈现的位图大小,则可以调整返回的布局指标,并返回数据GetOverhangMetrics()。但最后,了解结果布局的确切像素大小的唯一方法是渲染它。

所以回答你的问题,返回倾斜字体的布局指标已经是正确的,它们只是意味着与你期望的略有不同。