Estás trabajando sin conexión, espera a que vuelva la conexión a Internet

Cómo GetGlyphOutline() formato nativo de búfer

IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.

87115
Renuncia a responsabilidad de los contenidos de la KB sobre productos a los que ya no se ofrece asistencia alguna
El presente artículo se escribió para productos para los que Microsoft ya no ofrece soporte técnico. Por tanto, el presente artículo se ofrece "tal cual" y no será actualizado.
Resumen
La función GetGlyphOutline proporciona un método para una aplicación recuperar la información de nivel más bajo sobre un glifo en el entorno de TrueType. Este artículo describe el formato de los datos que devuelve la función GetGlyphOutline .
Más información
Un contorno de glifo es una serie de perfiles que describen el glifo. Cada perfil se define mediante una estructura de datos TTPOLYGONHEADER , seguido por estructuras de datos TTPOLYCURVE tantos como son necesarios para describir el perfil.

Cada posición es descrita por una estructura de datos POINTFX , que representa una posición absoluta, no una posición relativa. La inicial y final punto para el glifo viene dado por el miembro pfxStart de la estructura de datos TTPOLYGONHEADER .

Las estructuras de datos TTPOLYCURVE se dividen en dos tipos: un registro TT_PRIM_LINE o un registro TT_PRIM_QSPLINE. Un registro TT_PRIM_LINE es una serie de puntos; las líneas dibujadas entre los puntos de describan el esquema del glifo. Un registro TT_PRIM_QSPLINE es una serie de puntos que definen las curvas cuadráticas spline (q curvas spline) necesarias para describir el esquema del carácter.

En TrueType, se define una spline q por tres puntos (A, B y C), donde los puntos de A y C son de la curva y punto que B es desactivar la curva. La ecuación para cada spline q es como sigue (xA representa la coordenada x del punto A, hasta que representa la coordenada y de un punto y así sucesivamente)
   x(t) = (xA-2xB+xC)*t^2 + (2xB-2xA)*t + xA   y(t) = (yA-2yB+yC)*t^2 + (2yB-2yA)*t + yA				
donde t varía desde 0,0 a 1,0.

El formato de un registro TT_PRIM_QSPLINE es como sigue:
  • A punto de la spline q es la posición actual (bien pfxStart en el TTPOLYGONHEADER, el punto de partida para la TTPOLYCURVE o el punto final de la anterior TTPOLYCURVE).
  • Punto B es el punto actual en el registro.
  • Punto C es como sigue:
    • Si el registro tiene dos o más puntos siguiente punto B, C de punto es el punto medio entre punto B y el punto siguiente en el registro.
    • Lo contrario, punto C es el punto siguiente punto B.
El código siguiente presenta el algoritmo utilizado para procesar un registro TT_PRIM_QSPLINE. Mientras este código muestra cómo extraer q splines de un registro TT_PRIM_QSPLINE, no es adecuado para su uso en una aplicación.
   pfxA = pfxStart;                // Starting point for this polygon   for (u = 0; u < cpfx - 1; u++)  // Walk through points in spline   {   pfxB = apfx[u];              // B is always the current point   if (u < cpfx - 2)            // If not on last spline, compute C      {      pfxC.x = (pfxB.x + apfx[u+1].x) / 2;  // x midpoint      pfxC.y = (pfxB.y + apfx[u+1].y) / 2;  // y midpoint      }   else                         // Else, next point is C      pfxC = apfx[u+1];                                // Draw q-spline   DrawQSpline(hdc, pfxA, pfxB, pfxC);   pfxA = pfxC;                 // Update current point   }				
el algoritmo anterior manipula puntos directamente, mediante operadores de punto flotante. Sin embargo, los puntos de spline q registros se almacenan en un tipo de datos decimal. El código siguiente muestra cómo manipular los elementos de datos decimal:
   FIXED fx;   long *pl = (long *)&fx;   // Perform all arithmetic on *pl rather than on fx   *pl = *pl / 2;				
la función siguiente convierte un número de punto flotante en la representación decimal:
   FIXED FixedFromDouble(double d)   {   long l;   l = (long) (d * 65536L);   return *(FIXED *)&amp;l;   }				
en una aplicación de producción, en lugar escribir una función DrawQSpline para dibujar cada spline q individualmente, resulta más eficaz para calcular puntos de la spline q y almacenarlos en una matriz de estructuras de datos POINT . Cuando se completan los cálculos para un glifo, pasar la matriz POINT a la función PolyPolygon para dibujar y rellenar el glifo.

En el ejemplo siguiente se presenta los datos devueltos por GetGlyphOutline para el glifo minúsculas "j" en la fuente Arial de 24 puntos del 8514/a (fuentes pequeñas) controlador de vídeo:
   GetGlyphOutline GGO_NATIVE 'j'   dwrc            = 208      // Total native buffer size in bytes   gmBlackBoxX, Y  = 6, 29    // Dimensions of black part of glyph   gmptGlyphOrigin = -1, 23   // Lower-left corner of glyph   gmCellIncX, Y   = 7, 0     // Vector to next glyph origin   TTPOLYGONHEADER #1           // Contour for dot on "j"   cb       = 44              // Total size of dot polygon   dwType   = 24              // TT_POLYGON_TYPE   pfxStart = 2.000, 20.000   // Start at lower-left corner of dot   TTPOLYCURVE #1   wType  = TT_PRIM_LINE   cpfx   = 3   pfx[0] = 2.000, 23.000   pfx[1] = 5.000, 23.000   pfx[2] = 5.000, 20.000   // Automatically close to pfxStart   TTPOLYGONHEADER #2   // Contour for body of "j"   cb       = 164     // Total size is 164 bytes   dwType   = 24      // TT_POLYGON_TYPE   pfxStart = -1.469, -5.641   TTPOLYCURVE #1     // Finish flat bottom end of "j"   wType  = TT_PRIM_LINE   cpfx   = 1   pfx[0] = -0.828, -2.813   TTPOLYCURVE #2    // Make hook in "j" with spline                    // Point A in spline is end of TTPOLYCURVE #1    wType  = TT_PRIM_QSPLINE    cpfx   = 2               // two points in spline -> one curve    pfx[0] = -0.047, -3.000  // This is point B in spline    pfx[1] = 0.406, -3.000   // Last point is always point C   TTPOLYCURVE #3    // Finish hook in "j"                    // Point A in spline is end of TTPOLYCURVE #2   wType  = TT_PRIM_QSPLINE   cpfx   = 3               // Three points -> two splines   pfx[0] = 1.219, -3.000   // Point B for first spline                             // Point C is (pfx[0] + pfx[1]) / 2   pfx[1] = 2.000, -1.906   // Point B for second spline   pfx[2] = 2.000, 0.281    // Point C for second spline   TTPOLYCURVE #4    // Majority of "j" outlined by this polyline    wType  = TT_PRIM_LINE    cpfx   = 3    pfx[0] = 2.000, 17.000    pfx[1] = 5.000, 17.000    pfx[2] = 5.000, -0.250   TTPOLYCURVE #5    // start of bottom of hook    wType  = TT_PRIM_QSPLINE    cpfx   = 2               // One spline in this polycurve    pfx[0] = 5.000, -3.266   // Point B for spline    pfx[1] = 4.188, -4.453   // Point C for spline   TTPOLYCURVE #6    // Middle of bottom of hook    wType  = TT_PRIM_QSPLINE    cpfx   = 2               // One spline in this polycurve    pfx[0] = 3.156, -6.000   // B for spline    pfx[1] = 0.766, -6.000   // C for spline   TTPOLYCURVE #7    // Finish bottom of hook and glyph    wType  = TT_PRIM_QSPLINE    cpfx   = 2               // One spline in this polycurve    pfx[0] = -0.391, -6.000  // B for spline    pfx[1] = -1.469, -5.641  // C for spline				

Advertencia: este artículo se ha traducido automáticamente

Propiedades

Id. de artículo: 87115 - Última revisión: 11/21/2006 15:33:33 - Revisión: 2.3

  • Microsoft Windows Software Development Kit 3.1
  • Microsoft Win32 Application Programming Interface
  • kbmt kbhowto KB87115 KbMtes
Comentarios