Je bent nu offline; er wordt gewacht tot er weer een internetverbinding is

Het oorspronkelijke Buffer indeling GetGlyphOutline()

BELANGRIJK: Dit artikel is vertaald door de vertaalmachine software van Microsoft in plaats van door een professionele vertaler. Microsoft biedt u professioneel vertaalde artikelen en artikelen vertaald door de vertaalmachine, zodat u toegang heeft tot al onze knowledge base artikelen in uw eigen taal. Artikelen vertaald door de vertaalmachine zijn niet altijd perfect vertaald. Deze artikelen kunnen fouten bevatten in de vocabulaire, zinsopbouw en grammatica en kunnen lijken op hoe een anderstalige de taal spreekt en schrijft. Microsoft is niet verantwoordelijk voor onnauwkeurigheden, fouten en schade ontstaan door een incorrecte vertaling van de content of het gebruik ervan door onze klanten. Microsoft past continue de kwaliteit van de vertaalmachine software aan door deze te updaten.

De Engelstalige versie van dit artikel is de volgende: 87115
Vrijwaring inhoud KB-artikelen over niet langer ondersteunde producten
Dit artikel heeft betrekking op producten waarvoor Microsoft geen ondersteuning meer biedt. Daarom wordt dit artikel alleen in de huidige vorm aangeboden en wordt het niet meer bijgewerkt.
Samenvatting
De functie GetGlyphOutline biedt een methode voor een toepassinghet laagste niveau informatie ophalen over een glyph in het TrueTypeomgeving. Dit artikel beschrijft de indeling van de gegevens deDe functie GetGlyphOutline retourneert.
Meer informatie
Een overzicht van de glyph is een reeks contouren die de glyph beschrijven. Elkecontour wordt gedefinieerd door een gegevensstructuur TTPOLYGONHEADER isgevolgd door zoveel TTPOLYCURVE gegevensstructuren zijn vereistBeschrijf de contour.

Elke positie wordt beschreven door een gegevensstructuur POINTFX dievertegenwoordigt een absolute positie een positie. De eersteen eindpunt voor de glyph wordt gegeven door het lid pfxStart van de TTPOLYGONHEADER -gegevensstructuur.

De gegevensstructuren TTPOLYCURVE vallen in twee typen: een TT_PRIM_LINErecord of een record TT_PRIM_QSPLINE. Een record TT_PRIM_LINE is een seriepunten; lijnen getekend tussen de punten de omtrek van deglyph. Een record TT_PRIM_QSPLINE is een reeks punten definiëren dekwadratische splines (q-splines) nodig om de omtrek van deteken.

TrueType, q-spline wordt gedefinieerd door drie punten (A, B en C)waar de punten a en c op de curve en punt b zijn is uit de kromme.De vergelijking voor elke q spline is als volgt (xA vertegenwoordigt dex-coördinaat van een punt, yA vertegenwoordigt de y-coördinaat van een punt,enzovoort)
   x(t) = (xA-2xB+xC)*t^2 + (2xB-2xA)*t + xA   y(t) = (yA-2yB+yC)*t^2 + (2yB-2yA)*t + yA				
waarbij t varieert tussen 0,0 en 1,0.

De indeling van een record TT_PRIM_QSPLINE is als volgt:
  • Een punt op de q-spline wordt de huidige positie (of pfxStart in de TTPOLYGONHEADER het beginpunt voor de TTPOLYCURVE of de eindpunt van de vorige TTPOLYCURVE).
  • Punt b is het huidige punt in de record.
  • Punt c is als volgt:
    • Als de record heeft twee of meer punten na punt B, punt c is het middelpunt tussen punt b en het volgende punt in de record.
    • Anders, punt c is het volgende punt B.
De volgende code geeft de algoritme gebruikt om het proces eenTT_PRIM_QSPLINE record. Terwijl deze code demonstreert het uitpakkenq-splines uit een record TT_PRIM_QSPLINE, is niet geschikt voor gebruikin een toepassing.
   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   }				
De bovenstaande algoritme manipuleert punten rechtstreeks met drijvende kommaoperatoren. Punten q spline records worden echter opgeslagen in een vastgegevenstype. De volgende code toont hoe vast bewerkenitems van gegevens:
   FIXED fx;   long *pl = (long *)&fx;   // Perform all arithmetic on *pl rather than on fx   *pl = *pl / 2;				
De volgende functie converteert een getal met drijvende komma naar vastweergave:
   FIXED FixedFromDouble(double d)   {   long l;   l = (long) (d * 65536L);   return *(FIXED *)&amp;l;   }				
In een productietoepassing voor de, in plaats van schrijven een functie DrawQSpline afzonderlijk elke q spline tekenen, is het efficiënter ompunten op de q-spline berekenen en deze opslaan in een matrix van puntgegevensstructuren. Wanneer de berekeningen voor een glyph zijn, doorgevende matrix punt aan de functie PolyPolygon tekenen en vullen deglyph.

In het volgende voorbeeld worden de gegevens die zijn geretourneerd door deGetGlyphOutline voor de kleine letter 'j' glyph in de 24-punts Arialvan de 8514/a (kleine lettertypen) stuurprogramma:
   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				

Waarschuwing: dit artikel is automatisch vertaald

Eigenschappen

Artikel-id: 87115 - Laatst bijgewerkt: 06/11/2012 12:33:00 - Revisie: 4.0

Microsoft Windows Software Development Kit 3.1, Microsoft Win32-API

  • kbhowto kbmt KB87115 KbMtnl
Feedback