Sie sind zurzeit offline. Es wird auf die erneute Herstellung einer Internetverbindung gewartet.

Gewusst wie GetGlyphOutline() Puffer Eigenformat

Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.

Den englischen Originalartikel können Sie über folgenden Link abrufen: 87115
Disclaimer zu nicht mehr gepflegten KB-Inhalten
Dieser Artikel wurde für Produkte verfasst, für die Microsoft keinen Support mehr anbietet. Der Artikel wird deshalb in der vorliegenden Form bereitgestellt und nicht mehr weiter aktualisiert.
Zusammenfassung
Die GetGlyphOutline -Funktion stellt eine Methode für eine Anwendung die untersten Ebene Informationen über ein Symbol in der TrueType-Umgebung abzurufen. Dieser Artikel beschreibt das Format der Daten, die GetGlyphOutline -Funktion gibt.
Weitere Informationen
Eine Gliederung Symbol ist eine Reihe von Profile, die das Symbol zu beschreiben. Jede Oberfläche wird durch eine TTPOLYGONHEADER -Datenstruktur definiert, von wie viele TTPOLYCURVE Datenstrukturen erforderlich gefolgt, um die Oberfläche beschrieben werden.

Jede Position wird durch eine Datenstruktur POINTFX beschrieben, die eine absolute Position keine relative Position darstellt. Die Anfangs- und Endpunkt für das Symbol wird durch die PfxStart Mitglied der TTPOLYGONHEADER -Datenstruktur angegeben.

Die TTPOLYCURVE -Datenstrukturen fallen in zwei Typen: ein TT_PRIM_LINE-Datensatz oder ein TT_PRIM_QSPLINE-Datensatz. Ein TT_PRIM_LINE-Datensatz ist eine Reihe von Punkten; Linien zwischen den Punkten gezeichnet wird die Gliederung des Symbols für das beschreiben. Ein TT_PRIM_QSPLINE-Datensatz ist eine Reihe von Punkten definieren die quadratische Splines (Q-Splines) erforderlich, um den Umriss des Zeichens beschreiben.

In TrueType wird durch drei Punkte (A, B und C), Punkt A und C, wo sich die Kurve befinden und Punkt B Deaktivieren der Kurve ist ein Q-Spline definiert. Die Gleichung für jede Q-Spline lautet wie folgt (xA stellt die X-Koordinate des Punkt A yA stellt die y-Koordinate des Punkt A usw.)
   x(t) = (xA-2xB+xC)*t^2 + (2xB-2xA)*t + xA   y(t) = (yA-2yB+yC)*t^2 + (2yB-2yA)*t + yA				
, wobei t variiert von 0,0 1.0.

Das Format des ein TT_PRIM_QSPLINE-Datensatz ist wie folgt:
  • Punkt A auf die Q-Spline wird die aktuelle Position (entweder PfxStart in der TTPOLYGONHEADER, den Ausgangspunkt für die TTPOLYCURVE oder der Endpunkt des vorherigen TTPOLYCURVE).
  • Punkt B ist der aktuelle Punkt im Datensatz.
  • Punkt C lautet wie folgt:
    • Wenn der Datensatz verfügt über zwei oder mehr Punkte nach Punkt B, zeigen Sie C dem mittleren Punkt zwischen Punkt B und der nächste Punkt im Datensatz ist.
    • Andernfalls ist Punkt C den folgenden Punkt b Punkt
Der folgende Code zeigt den Algorithmus an einen TT_PRIM_QSPLINE-Datensatz verarbeitet. Während dieser Code zum Extrahieren von Q-Splines aus einem Datensatz TT_PRIM_QSPLINE veranschaulicht, ist es nicht für die Verwendung in einer Anwendung geeignet.
   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   }				
der oben angegebenen Algorithmus bearbeitet Punkt direkt mit Gleitkommazahlen Operatoren. Punkte in Q-Spline-Datensätze sind jedoch in einem festen Datentyp gespeichert. Der folgende Code veranschaulicht wie fest Datenelemente bearbeiten:
   FIXED fx;   long *pl = (long *)&fx;   // Perform all arithmetic on *pl rather than on fx   *pl = *pl / 2;				
die folgende Funktion konvertiert eine Gleitkommazahl in festen Darstellung:
   FIXED FixedFromDouble(double d)   {   long l;   l = (long) (d * 65536L);   return *(FIXED *)&amp;l;   }				
in einer Produktionsanwendung, sondern schreiben eine DrawQSpline -Funktion einzeln jedes Q-Spline zu zeichnen, ist es effizienter, Punkte auf dem Q-Spline berechnen und in ein Array von POINT -Datenstrukturen zu speichern. Wenn die Berechnungen für ein Symbol abgeschlossen sind, übergeben Sie das POINT-Array an die Funktion PolyPolygon zeichnen und füllen Sie das Symbol.

Das folgende Beispiel zeigt die Daten von GetGlyphOutline für die Kleinbuchstaben "j" Symbols in die Schriftart auf 24 Punkt Arial des 8514/a (kleine Schriftarten) Grafiktreibers zurückgegeben:
   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				

Warnung: Dieser Artikel wurde automatisch übersetzt.

Eigenschaften

Artikelnummer: 87115 – Letzte Überarbeitung: 11/21/2006 15:33:33 – Revision: 2.3

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

  • kbmt kbhowto KB87115 KbMtde
Feedback
did=1&t=">ar m=document.createElement('meta');m.name='ms.dqp0';m.content='true';document.getElementsByTagName('head')[0].appendChild(m);" onload="var m=document.createElement('meta');m.name='ms.dqp0';m.content='false';document.getElementsByTagName('head')[0].appendChild(m);" src="http://c1.microsoft.com/c.gif?">