3
ID2D1RenderTarget::DrawGlyphRun
採取以下PARAMS:確定文本邊界框使用Direct2D/DirectWrite的
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;
};
我試圖找出包含輸出字形的最小矩形。
這是我擁有的所有數據。請注意,我有一個點,它是baselineOrigin
,我可以使用DWRITE_GLYPH_RUN
中的glyphAdvances
和glyphOffsets
來計算寬度。問題是如何確定身高?
謝謝。
謝謝 - 好主意。 –
該方法幾乎完美,但不完全。我得到了界限,但在某些地區它們似乎有1-2個像素。當我稍後使用生成的幾何體渲染字形而不是使用使用不同顏色的「DrawGlyphRun」時,它們不完全匹配。任何想法爲什麼會這樣?我使用所有GetGlyphRunOutline參數是這樣的: glyphRun-> fontFace-> GetGlyphRunOutline( \t glyphRun-> fontEmSize, \t glyphRun-> glyphIndices, \t glyphRun-> glyphAdvances, \t glyphRun-> glyphOffsets, \t glyphRun-> glyphCount, \t glyphRun-> isSideways, \t glyphRun-> bidiLevel%2, \t pGeometrySink); glyphRun與傳遞給DrawGlyphRun相同。 –
我會在稍後看看。 – zdd