ID2D1RenderTarget::DrawGlyphRun
采用以下参数:
D2D1_POINT_2F baselineOrigin,
__in CONST DWRITE_GLYPH_RUN *glyphRun,
__in ID2D1Brush *foregroundBrush,
DWRITE_MEASURING_MODE measuringMode /*= DWRITE_MEASURING_MODE_NATURAL */
DWRITE_GLYPH_RUN在哪里
struct DWRITE_GLYPH_RUN
{
__notnull IDWriteFontFace* fontFace;
FLOAT fontEmSize;
UINT32 glyphCount;
__field_ecount(glyphCount) UINT16 const* glyphIndices;
__field_ecount_opt(glyphCount) FLOAT const* glyphAdvances;
__field_ecount_opt(glyphCount) DWRITE_GLYPH_OFFSET const* glyphOffsets;
BOOL isSideways;
UINT32 bidiLevel;
};
我试图找出包含输出字形的最小矩形。
这是我的所有数据。请注意,我有1个点baselineOrigin
,我可以使用glyphAdvances
中的glyphOffsets
和DWRITE_GLYPH_RUN
计算宽度。问题是如何确定身高?
感谢。
答案 0 :(得分:2)
我之前使用另一种方法:
将文本转换为几何体后,您可以对其进行平移/旋转/缩放,并执行几何体可以执行的操作。您也可以在获取边界矩形并使用自己的方法绘制后删除几何体。
参考的一些代码
// Create path geometry
hr = pD2DFactory->CreatePathGeometry(&pPathGeometry);
if(FAILED(hr))
{
MessageBox(NULL, L"Create path geometry failed!", L"Error", 0);
return;
}
// Open sink
hr = pPathGeometry->Open(&pGeometrySink);
if(FAILED(hr))
{
MessageBox(NULL, L"Open geometry sink failed!", L"Error", 0);
return;
}
// Get glyph run outline
hr = pFontFace->GetGlyphRunOutline(
fontSize_, // font size
pGlyphIndices,
NULL,
NULL,
textLength,
FALSE,
FALSE,
pGeometrySink
);
if(FAILED(hr))
{
MessageBox(NULL, L"Get glyph run outline failed!", L"Error", 0);
return;
}
// Close sink
pGeometrySink->Close();