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

Таким образом, отвечая на ваш вопрос, возвращаемые метрики макета для косого шрифта уже верны, они просто означают немного другое, чем вы ожидаете.

Другие вопросы по тегам