Как получить правильную ширину текста для косого шрифта в 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 ответ
Метрики макета основаны на метриках дизайна шрифта, намекаемых или нет, а не на реальных чернилах для каждого глифа. Если вы хотите, чтобы метрики более точно соответствовали результирующему размеру отображаемого растрового изображения, вы можете скорректировать возвращаемые метрики макета с данными GetOverhangMetrics()
возвращается. Но в конце единственный способ узнать точный размер пикселя полученного макета - это отрендерить его.
Таким образом, отвечая на ваш вопрос, возвращаемые метрики макета для косого шрифта уже верны, они просто означают немного другое, чем вы ожидаете.