GetGlyphOutline功能如何工作? (WinAPI的)

时间:2010-05-05 22:37:44

标签: c++ c winapi fonts

基本上我想从ttf字体中获取bezier控制点,然后绘制它们。我基本上想知道两件事。

  1. 它会返回一个点数组还是更复杂?
  2. 如何从另一个ex:具有2个轮廓的字母O来判断1个轮廓的点?
  3. 由于

2 个答案:

答案 0 :(得分:1)

找到它:

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

答案 1 :(得分:0)

@Milo: 无效指针是指定任何内存位置的指针,无论定义为“类型”的位置(基本上,它与程序集中使用的“指针”类似)。问题是,通常在不同的机器架构之间不可移植,如果你想对数组做任何事情,你必须a)手动实现每个成员之间的边界并跟踪字节大小(这是通常甚至更依赖于体系结构)或b)将其转换为预定义的结构或一系列结构,通常如果必须这样做,您可能只需使用指向结构的指针并避免使用void指针完全。

我说通常是的原因是因为在某些情况下使用void指针的缺点不适用。另外,我知道程序集本身并不使用“指针”,但 仍然非常类似,我只是用这个术语来帮助澄清我的解释。请记住,许多事情并非一成不变。