如何在 DirectWrite 中为倾斜字体获取正确的文本宽度?
How to get correct text width for oblique font in 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 时,宽度应该更大。我如何获得倾斜文本的正确宽度?
谢谢。
布局指标基于字体设计指标,无论是否暗示,而不是每个字形的实际墨盒。如果您想要更接近结果渲染位图大小的指标,您可以使用数据 GetOverhangMetrics()
returns 调整返回的布局指标。但最终要知道最终布局的确切像素大小的唯一方法是渲染它。
所以回答你的问题,返回的倾斜字体布局指标已经正确,它们只是意味着与你预期的略有不同。
我通过以下代码创建了一个 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 时,宽度应该更大。我如何获得倾斜文本的正确宽度?
谢谢。
布局指标基于字体设计指标,无论是否暗示,而不是每个字形的实际墨盒。如果您想要更接近结果渲染位图大小的指标,您可以使用数据 GetOverhangMetrics()
returns 调整返回的布局指标。但最终要知道最终布局的确切像素大小的唯一方法是渲染它。
所以回答你的问题,返回的倾斜字体布局指标已经正确,它们只是意味着与你预期的略有不同。