2017-02-12 71 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()返回來調整返回的佈局指標。但最後,知道結果佈局的確切像素大小的唯一方法就是渲染它。

因此,回答你的問題,斜體字體返回的佈局指標已經是正確的,它們只是意味着與你期望的略有不同。