GetGlyphOutlineA 函数 (wingdi.h)

GetGlyphOutline 函数检索选定到指定设备上下文的 TrueType 字体中的字符的轮廓或位图。

语法

DWORD GetGlyphOutlineA(
  [in]  HDC            hdc,
  [in]  UINT           uChar,
  [in]  UINT           fuFormat,
  [out] LPGLYPHMETRICS lpgm,
  [in]  DWORD          cjBuffer,
  [out] LPVOID         pvBuffer,
  [in]  const MAT2     *lpmat2
);

参数

[in] hdc

设备上下文的句柄。

[in] uChar

要为其返回数据的字符。

[in] fuFormat

函数检索的数据的格式。 此参数可以是下列值之一。

价值 意义
GGO_BEZIER
该函数将曲线数据检索为立方贝塞尔样条(而不是二次样条格式)。
GGO_BITMAP
该函数检索字形位图。 有关内存分配的信息,请参阅以下“备注”部分。
GGO_GLYPH_INDEX
指示 uChar 参数是 TrueType 字形索引而不是字符代码。 有关字形索引的其他注释,请参阅 ExtTextOut 函数。
GGO_GRAY2_BITMAP
该函数检索一个字形位图,该位图包含五个灰色级别。
GGO_GRAY4_BITMAP
该函数检索包含 17 个灰色级别的字形位图。
GGO_GRAY8_BITMAP
该函数检索包含 65 个灰色级别的字形位图。
GGO_METRICS
该函数仅检索由 lpgm指定的 GLYPHMETRICS 结构。 将忽略 lpvBuffer。 此值会影响失败时函数返回值的含义;请参阅“返回值”部分。
GGO_NATIVE
该函数检索光栅器本机格式中的曲线数据点,并使用字体的设计单位。
GGO_UNHINTED
该函数仅返回未隐藏的轮廓。 此标志仅适用于GGO_BEZIER和GGO_NATIVE。
 

请注意,对于GGO_GRAYn_BITMAP值,该函数检索一个字形位图,其中包含 n^2+1 (n 平方加 1) 级别的灰色。

[out] lpgm

指向 GLYPHMETRICS 结构的指针,描述字形在字符单元格中的位置。

[in] cjBuffer

缓冲区(*lpvBuffer)的大小(以字节为单位),其中函数用于复制有关大纲字符的信息。 如果此值为零,该函数将返回所需的缓冲区大小。

[out] pvBuffer

指向接收大纲字符相关信息的缓冲区的指针。 如果此值 NULL,则该函数将返回所需的缓冲区大小。

[in] lpmat2

指向 MAT2 结构的指针,该结构指定字符的转换矩阵。

返回值

如果指定了GGO_BITMAP、GGO_GRAY2_BITMAP、GGO_GRAY4_BITMAP、GGO_GRAY8_BITMAP或GGO_NATIVE,并且函数成功,则返回值大于零;否则,返回值GDI_ERROR。 如果指定了其中一个标志,并且缓冲区大小或地址为零,则返回值指定所需的缓冲区大小(以字节为单位)。

如果指定了GGO_METRICS并且函数失败,则返回值GDI_ERROR。

言论

GetGlyphOutline 函数返回的字形轮廓用于网格拟合字形。 (网格拟合字形是经过修改的字形,以便其位图图像尽可能符合字形的原始设计。如果应用程序需要未修改的字形轮廓,它可以请求字体大小等于字体 em 单位的字符的字形轮廓。 字体 em 单元的值存储在 OUTLINETEXTMETRIC 结构的 otmEMSquare 成员中。

指定GGO_BITMAP时,GetGlyphOutline 返回的字形位图是一个 DWORD 对齐的、面向行的单色位图。 指定GGO_GRAY2_BITMAP时,返回的位图是 DWORD 对齐的、面向行的字节数组,其值范围为 0 到 4。 指定GGO_GRAY4_BITMAP时,返回的位图是 DWORD 对齐的、面向行的字节数组,其值范围为 0 到 16。 指定GGO_GRAY8_BITMAP时,返回的位图是 DWORD 对齐的、面向行的字节数组,其值范围为 0 到 64。

指定GGO_NATIVE时,GetGlyphOutline 返回的本机缓冲区是字形轮廓。 字形轮廓作为一系列由 TTPOLYGONHEADER 结构定义的一个或多个轮廓返回,后跟一个或多个曲线。 轮廓中的每个曲线都由 TTPOLYCURVE 结构定义,后跟许多 POINTFX 数据点。 POINTFX 点是绝对位置,而不是相对移动。 轮廓的起点由 pfxStartTTPOLYGONHEADER 结构的成员提供。 每个曲线的起点是上一曲线的最后一个点或轮廓的起点。 曲线中的数据点计数存储在 TTPOLYCURVE 结构的 cpfx 成员中。 缓冲区中每个轮廓的大小(以字节为单位)存储在 TTPOLYGONHEADER 结构的 cb 成员中。 其他曲线定义将打包到前面曲线之后的缓冲区中,其他轮廓将打包到前面的轮廓之后的缓冲区中。 缓冲区包含与 GetGlyphOutline返回的缓冲区中一样多的轮廓。

GLYPHMETRICS 结构指定字符单元格的宽度和字符单元格中字形的位置。 字符单元格的原点位于字体基线的单元格左侧。 字形原点的位置相对于字符单元格原点。 字符单元格的高度、基线和字体全局的其他指标由 OUTLINETEXTMETRIC 结构提供。

应用程序可以通过在 lpMatrix 参数中指定 2×2 转换矩阵来更改以位图或本机格式检索的字符。 例如,可以使用矩阵乘法通过剪切、旋转、缩放或三者的任意组合来修改字形。

有关字形轮廓的其他信息位于 TrueType 和 OpenType 技术规范中。

注意

wingdi.h 标头将 GetGlyphOutline 定义为一个别名,该别名根据 UNICODE 预处理器常量的定义自动选择此函数的 ANSI 或 Unicode 版本。 将中性编码别名与不中性编码的代码混合使用可能会导致编译或运行时错误不匹配。 有关详细信息,请参阅函数原型的 约定。

要求

要求 价值
最低支持的客户端 Windows 2000 Professional [仅限桌面应用]
支持的最低服务器 Windows 2000 Server [仅限桌面应用]
目标平台 窗户
标头 wingdi.h (包括 Windows.h)
Gdi32.lib
DLL Gdi32.dll

另请参阅

ExtTextOut

FORM_INFO_1

字体和文本功能

字体和文本概述

GLYPHMETRICS

GetOutlineTextMetrics

MAT2

OUTLINETEXTMETRIC

POINT

POINTFX

TTPOLYCURVE

TTPOLYGONHEADER