gpt4 book ai didi

direct2d - 使用 Direct2D/DirectWrite 确定文本边界框

转载 作者:行者123 更新时间:2023-12-02 18:59:07 24 4
gpt4 key购买 nike

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,我可以使用 DWRITE_GLYPH_RUN 中的 glyphAdvancesglyphOffsets 计算宽度>。问题是如何确定高度?

谢谢。

最佳答案

我之前使用了另一种方法来执行此操作:

  1. 创建路径几何图形
  2. 打开路径几何体以获取几何体接收器
  3. 调用 GetGlyphRunOutline 将文本转换为几何图形
  4. 调用转换后的几何图形的GetBounds获取边界矩形

将文本转换为几何图形后,您可以平移/旋转/缩放它,并执行几何图形可以执行的所有操作。您也可以在获取边界矩形并使用自己的方法绘制后删除几何图形。

一些代码供大家引用

// 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();

关于direct2d - 使用 Direct2D/DirectWrite 确定文本边界框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13587532/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com