Vous êtes actuellement hors ligne, en attente de reconnexion à Internet.

Comment faire pour GetGlyphOutline() natif tampon format

IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d’articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d’avoir accès, dans votre propre langue, à l’ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s’exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s’efforce aussi continuellement de faire évoluer son système de traduction automatique.

La version anglaise de cet article est la suivante: 87115
Exclusion de responsabilité concernant les contenus obsolètes dans la Base de connaissances
Cet article concerne des produits pour lesquels Microsoft n'offre plus de support. Il est par conséquent fourni « en l'état » et ne sera plus mis à jour.
Résumé
La fonction GetGlyphOutline fournit une méthode pour une application pour récupérer les informations sur un glyphe de l'environnement TrueType niveau le plus bas. Cet article décrit le format des données que la fonction GetGlyphOutline renvoie.
Plus d'informations
Un plan glyphe est une série de profils qui décrivent le glyphe. Chaque profil est défini par une structure de données TTPOLYGONHEADER , qui est suivie par structures de données TTPOLYCURVE autant que nécessaire pour décrire le profil.

Chaque position est décrit par une structure de données POINTFX , qui représente une position absolue, pas une position relative. Début et de fin point pour le glyphe est fourni par le membre pfxStart de la structure de données TTPOLYGONHEADER .

Les structures de données TTPOLYCURVE se répartissent en deux types : un enregistrement TT_PRIM_LINE ou un enregistrement TT_PRIM_QSPLINE. Un enregistrement TT_PRIM_LINE est une série de points ; traits dessinés entre les points décrivent le plan du glyphe. Un enregistrement TT_PRIM_QSPLINE est une série de points définissant les splines quadratique (q-splines) requis pour décrire le plan du caractère.

De TrueType, un q-spline est défini par trois points (A, B et C), où les points de A et C sont sur la courbe et point que B est hors de la courbe. L'équation pour chaque q-spline est comme suit (xA représente la coordonnée x du point A, yA représente la coordonnée y d'un point, etc.)
   x(t) = (xA-2xB+xC)*t^2 + (2xB-2xA)*t + xA   y(t) = (yA-2yB+yC)*t^2 + (2yB-2yA)*t + yA				
où pas varie comprise entre 0,0 et 1,0.

Le format d'un enregistrement TT_PRIM_QSPLINE est comme suit :
  • UN point sur la q-spline est la position en cours (soit pfxStart dans le TTPOLYGONHEADER, le point de départ pour la TTPOLYCURVE ou le point de fin de la TTPOLYCURVE précédente).
  • Point B est le point en cours de l'enregistrement.
  • Point C est la suivante :
    • Si l'enregistrement a deux ou plusieurs points suivant point B, C point est le point central entre point B et le point suivant dans l'enregistrement.
    • Dans le cas contraire, point C est le point suivant point b.
Le code suivant présente l'algorithme utilisé pour traiter un enregistrement TT_PRIM_QSPLINE. Alors que ce code montre comment extraire q-splines à partir d'un enregistrement TT_PRIM_QSPLINE, il n'est pas appropriée pour une utilisation dans une application.
   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   }				
l'algorithme ci-dessus manipule points directement, à l'aide les opérateurs de calcul en virgule flottante. Cependant, points d'enregistrements q-spline sont stockés dans un type de données CTXT. Le code suivant montre comment manipuler des éléments de données FIXED :
   FIXED fx;   long *pl = (long *)&fx;   // Perform all arithmetic on *pl rather than on fx   *pl = *pl / 2;				
la fonction suivante convertit un nombre à virgule flottante dans la représentation FIXED :
   FIXED FixedFromDouble(double d)   {   long l;   l = (long) (d * 65536L);   return *(FIXED *)&amp;l;   }				
dans une application de production, plutôt qu'écrire une fonction DrawQSpline à dessiner chaque q-spline individuellement, il est plus efficace de calculer les points de la spline-q et les stocker dans un tableau de structures de données POINT . Lorsque les calculs pour un glyphe sont terminés, transmettre le tableau POINT à la fonction PolyPolygon pour dessiner et remplir le glyphe.

L'exemple suivant présente les données renvoyées par la GetGlyphOutline pour le glyphe j minuscule de la police Arial 24 points du pilote vidéo (polices MINUSCULE) 8514/a:
   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				

Avertissement : cet article a été traduit automatiquement

Propriétés

ID d'article : 87115 - Dernière mise à jour : 11/21/2006 15:33:33 - Révision : 2.3

Microsoft Windows Software Development Kit 3.1, Microsoft Win32 Application Programming Interface

  • kbmt kbhowto KB87115 KbMtfr
Commentaires
"text/JavaScript" async=""> var varAutoFirePV = 1; var varClickTracking = 1; var varCustomerTracking = 1; var Route = "76500"; var Ctrl = ""; document.write("