2017-02-12 78 views
1

我用下面的代码创建一个IDWriteTextLayout对象,如何在DirectWrite中获取斜体字体的正确文字宽度?

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时,宽度应该更大。我怎样才能得到斜文的正确宽度?

谢谢。

回答

0

布局度量标准基于字体设计度量标准,无论是否提示,而不是每个字形的实际墨盒。如果您希望与生成的渲染位图大小更接近匹配的指标,则可以使用数据GetOverhangMetrics()返回来调整返回的布局指标。但最后,知道结果布局的确切像素大小的唯一方法就是渲染它。

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

相关问题