平台 SDK: Windows GDI

GetGlyphOutline

GetGlyphOutline函数检索在指定设备上下文中选择的TrueType字体中的字符的大纲或位图。

DWORD GetGlyphOutline(
  HDC hdc,             // 设备上下文句柄
  UINT uChar,          // 字符查询
  UINT uFormat,        // 数据格式
  LPGLYPHMETRICS lpgm, // 字形指标
  DWORD cbBuffer,      // 数据缓冲区的大小
  LPVOID lpvBuffer,    // 数据缓冲区
  CONST MAT2 *lpmat2   // 转换矩阵
);

参数

  • hdc

  • [in] 设备上下文句柄。

  • uChar

  • [in] 指定要返回数据的字符。

  • uFormat

  • [in] 指定函数检索的数据格式。 此参数可以是以下值之一。

    含义
    GGO_BEZIERWindows 2000/XP: 该函数以三次贝塞尔样条(不是二次样条格式)获取曲线数据。
    GGO_BITMAP该函数检索字形位图。 有关内存分配的信息,请参阅以下备注部分。
    GGO_GLYPH_INDEXWindows 95/98/Me, Windows NT 4.0 and later: 表示uChar参数是TrueType Glyph索引,而不是字符代码。 有关字形索引的其他备注,请参阅ExtTextOut函数。
    GGO_GRAY2_BITMAPWindows 95/98/Me, Windows NT 4.0 and later: 该函数检索包含五个灰度级别的字形位图。
    GGO_GRAY4_BITMAPWindows 95/98/Me, Windows NT 4.0 and later: 该函数检索包含17个灰度级别的字形位图。
    GGO_GRAY8_BITMAPWindows 95/98/Me, Windows NT 4.0 and later: 该函数检索包含65级灰度的字形位图。
    GGO_METRICS该函数仅检索由lpgm指定的GLYPHMETRICS结构。 其他缓冲区被忽略。 该值会在失败时影响函数返回值的含义; 请参阅返回值部分。
    GGO_NATIVE该函数以光栅化器的本机格式检索曲线数据点,并使用字体的设计单位。
    GGO_UNHINTEDWindows 2000/XP: 该函数仅返回不希望的轮廓。 此标志仅与GGO_BEZIER和GGO_NATIVE配合使用。


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

  • lpgm

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

  • cbBuffer

  • [in] 指定函数要复制关于轮廓字符的信息的缓冲区(* lpvBuffer)的大小(以字节为单位)。 如果该值为零,则该函数返回缓冲区所需的大小。

  • lpvBuffer

  • [out] 指向接收关于轮廓字符的信息的缓冲区的指针。 如果此值为NULL,则该函数返回缓冲区所需的大小。

  • lpmat2

  • [in] 指向MAT2结构的指针,指定字符的变换矩阵。

返回值


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

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

Windows NT/2000/XP:  要获取扩展错误信息,请调用GetLastError

备注


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技术规范中。

Windows 95/98/Me: GetGlyphOutlineW由Microsoft Layer for Unicode支持。 要使用此功能,必须将某些文件添加到应用程序中,如Windows 95/98 / Me系统中的Microsoft Layer for Unicode所述。

要求

   Windows NT / 2000 / XP:包含在Windows NT 3.1及更高版本中。

   Windows 95/98 / Me:包含在Windows 95及更高版本中。

   头文件:声明于Wingdi.h; 包含于Windows.h。

   库:使用Gdi32.lib。

   Unicode: 在Windows NT/2000/XP上实现为Unicode和ANSI版本。 还支持Microsoft Layer for Unicode。