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 字形索引,而不是字符代码。 有关 Glyph 索引的其他说明,请参阅 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 平方加上一) 灰色级别的字形位图。

[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 单位的字符的字形轮廓。 字体单位的值存储在 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 点是绝对位置,而不是相对移动。 轮廓的起点由 TTPOLYGONHEADER 结构的 pfxStart 成员提供。 每个曲线的起点是上一条曲线的最后一个点或轮廓的起点。 曲线中的数据点计数存储在 TTPOLYCURVE 结构的 cpfx 成员中。 缓冲区中每个轮廓的大小(以字节为单位)存储在 TTPOLYGONHEADER 结构的 cb 成员中。 其他曲线定义将打包到前面的曲线之后的缓冲区中,其他轮廓将打包到前面的曲线之后的缓冲区中。 缓冲区包含 与 GetGlyphOutline 返回的缓冲区内适合的等量线。

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

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

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

注意

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

要求

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

另请参阅

ExtTextOut

FORM_INFO_1

字体和文本函数

字体和文本概述

GLYPHMETRICS

GetOutlineTextMetrics

MAT2

OUTLINETEXTMETRIC

POINTFX

TTPOLYCURVE

TTPOLYGONHEADER