Artikel-ID: 243285 - Geändert am: Montag, 12. Februar 2007 - Version: 1.5 Gewusst wie: TrueType Glyph Umrisse zeichnen
ZusammenfassungDie Win32-API- GetGlyphOutline -Funktion kann einheitlichen Symbols Gliedern von Daten aus einer TrueType-Schriftart zurückgeben. Um eine Gliederung TrueType-Symbol zu zeichnen, müssen die Daten aus der systemeigenen B-Spline-Definition einer Sequenz von Bézier-Zeilendefinitionen konvertiert werden. Dann kann PolyBezier Win32 API-Funktion verwendet werden, um die Gliederung zu zeichnen. Weitere InformationenDie Funktion GetGlyphOutline in Win32 Application Programming Interface(API) kann eine Gliederung TrueType abrufen. Die GGO_NATIVE-Formatoption füllt einen Puffer mit quadratische B-Spline-Kurven für eine TrueType-Gliederung. Quadratische B-Splines werden von TrueType-verwendet, um die Glyph-Gliederung in eine TrueType-Schriftartdatei beschreiben. Zum Zeichnen dieser Kurven Gliederung kann eine implementieren eine Zeichnung B-Spline-Funktion oder die Funktion PolyBezier aus der Win32-API verwenden. Quadratische B-Spline-Kurven sind eine Klasse von Parametrische Kurven, die den Pfad der mehrere Kurvensegmente über wenige Kontrollpunkte definieren. Eine quadratische Kurve ist eine zweite Reihenfolge Parametrische Kurve. Keine Funktion in der API direkt Zeichnen eines Splines quadratische vorhanden ist wenn die quadratisch konvertiert wird, um eine Kubikmeter gezeichnet werden kann, mit der Win32-API für das Zeichnen einer Bézier-Kurve Funktion sondern PolyBezier aufgerufen. Quadratische B-Spline-Kurven in bestimmten und Parametrische Kurven sind im Allgemeinen ein well-researched Thema von Grafiken in Informatik. Sie können auch recht komplex werden. Algorithmen wurden in verschiedenen Texte veröffentlicht, um eine Funktion zum Zeichnen eines Splines quadratische implementieren verwendet werden können, aber Beschreibung solcher Algorithmus würde den Rahmen dieses Artikels sprengen. Die PolyBezier -Funktion können Sie eine quadratische Spline ist eine Bézierkurve eine kubische oder dritten Reihenfolge Parametrische Kurve zeichnen. Da eine quadratische Spline eine zweite Reihenfolge Formel ist, kann es hinsichtlich der die höhere Reihenfolge kubische Gleichung ausgedrückt werden. Obwohl eine Formel für eine Quadratic als einen Kubikmeter Ausdrücken im Beispielcode angegeben ist, ist die Ableitung in in diesem Artikel nicht behandelt. Der Beispielcode in diesem Artikel ist eine Demonstration zum Analysieren von eines GGO_NATIVE Glyph-Puffers von der GetGlyphOutline -Funktion zurückgegeben wird. Durch das GGO_NATIVE-Format-Flag zurückgegebenen Puffers entspricht der Struktur TTPOLYGONHEADER . Die Struktur TTPOLYGONHEADER und die Daten, die folgt unmittelbar bilden eine Kontur eines Symbols TrueType. Eine Kontur ist eine vollständige Pfad der Kurven, die implizit geschlossen wird, wenn auf diese Weise nicht explizit zurückgegeben wird. Finden Sie im Platform SDK-Dokumentation auf die TTPOLYGONHEADER und TTPOLYCURVE Strukturen. Eine Kontur Symbol besteht aus mehreren Kurvensegmente durch TTPOLYCURVE Strukturen dargestellt. In eine Kontur TTPOLYGONHEADER eine oder mehrere TTPOLYCURVE Strukturen und Koordinatenpunkt Daten folgt. Der PfxStart -Member gibt den Koordinaten Ausgangspunkt der Kontur. Die Anzahl der Kurve Datensätze, die die TTPOLYGONHEADER wird durch den Cb -Member angegeben. Der Ausgangspunkt ist relativ zum Ursprung des Symbols für das. Ein Symbol stammt aus der unteren linken Ecke des Zeichens an das Zeichen Basisplan. Jeder TTPOLYCURVE Kurve Datensatz (ein Kurvensegment) besteht aus entweder quadratische B-Spline-Kontrollpunkte oder einfache Polyline Punkte. Die Anzahl der Punkte wird durch das TTPOLYCURVE - Cpfx -Element angegeben. Die Kurve Art der entweder Spline oder Polylinie wird durch das wType -Element angegeben. Das Array der Koordinatenpunkte sofort die Struktur folgen. Der Anfangspunkt der Kurve wird durch das Apfx -Element angegeben. Da ein Symbol auf mehr als eine Kontur enthalten kann, enthält der Puffer eine oder mehrere Gruppen von TTPOLYGONHEADER Strukturen und Daten. Nachfolgende Profile werden unmittelbar nach der vorherigen Aufgabe im systemeigenen Puffer gepackt. Nächste Kontur beginnt mit einer TTPOLYGONHEADER an das nächste Byte hinter der letzte Punkt des vorherigen Datensatzes Kurve. Dieser Beispielcode zeichnet den Umriss eines TrueType-Symbols durch Analysieren des GGO_NATIVE-Puffers eine Liste von Bézier-Liniensegmente erstellen, die jeder Oberfläche bilden. Die Liste der Bézier-Liniensegmente wird dann unter Verwendung der PolyBezier gezeichnet. Der Code, der den Puffer analysiert ist in der DrawT2Outline -Funktion. Erste Schritt erstellen eine Liste von Bézier-Zeilen besteht darin, die Größe des Puffers für die Liste zu bestimmen. Vier Punkte definiert Bézier-Zeilen. Die Funktion PolyBezier interpretiert ein Array von Punkten als eine kontinuierliche Zeile Bézier-Segmenten, in denen der Anfang der nächsten Zeile miteinander, mit dem Endpunkt der vorherigen Zeile ist. Daher sind nur drei Punkte erforderlich, um eine zusätzliche Bézier-Liniensegment beschreiben. Der GGO_NATIVE-Puffer kann entweder eine Kurve Polylinie oder eine quadratische B-Spline-Kurve enthalten. Zwei Punkten definieren ein Liniensegment während drei Punkte ein B-Spline definieren. Da jeder Typ ist mit einer PolyBezier mit Bézier-Zeile gezeichnet werden, tritt ein, der schlimmsten Fall, wenn eine Oberfläche, die vollständig von Liniensegmenten zusammengesetzt ist, mehrere Beziers erweitert. Beachten Sie, dass um eine zusätzliche Kurve auszudrücken Segment in einer B-Spline-Kurve Darstellung nur ein zusätzlicher Punkt erfordert. Diesen Punkt explizit definiert "B" oder deaktiviert Kurve zeigen und definiert implizit Kurve zeigen Sie auf der zusätzlichen. Der auf Kurve Punkt befindet sich der Mittelpunkt auf den nächsten "B". Daher wird eine zusätzliche Liniensegment oder ein zusätzliches Kurvensegment auf drei weitere Punkte einer Bézierkurve Zeile erweitern. Im Code wird davon ausgegangen, dass der gesamte systemeigene Puffer POINTFX Strukturen bestehen wird damit es die größtmögliche Anzahl von Punkten dargestellt durch den Puffer bestimmen kann. Die tatsächliche Anzahl ist etwas kleiner, da Struktur Aufwand die Profile und Kurven beschreiben. Die Größe des Puffers für die Bézier-Liste wird durch die maximal mögliche Anzahl der Punkte multipliziert die Datengröße des POINT -Struktur und drei multipliziert angegeben. Drei ist die Anzahl der zusätzliche Punkte, die für jede zusätzliche Zeile Segment oder quadratische Spline-Segments beim Konvertieren in einen Bézier erforderlich sind. Nach Bézier-Puffer reserviert wurde analysiert der Code den systemeigenen Puffer durch starten am ersten TTPOLYGONHEADER . Der Code während einer Iteration der Schleife verarbeitet eine Kontur und zeichnet es. Eine zweite innere Schleife analysiert jeden Typ Kurve. Im Fall von einer Kurve Polylinie (TT_PRIM_LINE) jedes Liniensegment der Polylinie konvertiert und an die Liste der Beziers mit der Funktion AppendPolyLineToBezier angefügt. Wenn die Kurve eine quadratische B-Spline (TT_PRIM_QSPLINE) ist, wird die AppendQuadBSplineToBezier -Funktion konvertiert und fügt quadratische B-Spline. Jede dieser Funktionen verwendet eine Schleife um jedes Segment der Kurve in seine unabhängige Kontrollpunkte zu analysieren. Der Zeile oder Spline wird in einer Bézierkurve konvertiert und an die Liste der Beziers angefügt. Eine Bézier Linie kann problemlos zu eine gerade Linie zeichnen. Die Start- und Enddatum Vektoren zeigen einfach am entgegengesetzten Ende das Liniensegment. Dies erfolgt in der MakeBezierFromLine -Funktion. Quadratische Splines in eine kubische Bezier-Spline konvertieren erfordert Ausdrücken der Kubikmeter Kontrollpunkte hinsichtlich der Kontrollpunkte des Quadratic. Die Formel übersetzt die Kontrollpunkte befindet sich in der MakeBezierFromQBSpline -Funktion. Vor dem Zeichnen der Kontur, wird der Code sichergestellt, dass der Pfad geschlossen ist, durch den Aufruf der CloseContour -Funktion. Die Funktion wird aufgerufen, nur dann, wenn die Anfangs- und Endpunkt der Sequenz von Beziers nicht miteinander stehen. Anschließend wird die Funktion PolyBezier aufgerufen. Nach der Kontur gezeichnet wird, ist die nächste Kontur TTPOLYGONHEADER durch Verschieben des Zeigers LpHeader hinter dem Ende der Datensätze in das aktuelle Profil gefunden. Wenn diese einen Zeigerwert hinter dem Ende der systemeigenen Puffer führt, hat der Code aller Profile und beendet verarbeitet. InformationsquellenWeitere Informationen über die TrueType-Spezifikation finden Sie unter: Microsoft TrueType Specifications (http://www.microsoft.com/typography/tt/tt.htm)
(http://www.microsoft.com/typography/tt/tt.htm)
Steht unter Spezifikationen auf der Microsoft Developer Network Library CD zur Verfügung. Die Informationen in diesem Artikel beziehen sich auf:
Maschinell übersetzter ArtikelWichtig: 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: 243285
(http://support.microsoft.com/kb/243285/en-us/
)
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.
| Weitere Ressourcen Weitere SupportseitenCommunityHilfe erhaltenSPRACHE AUSWÄHLEN
|






Windows Live
Facebook
Twitter
Linkedin
Digg it
Yahoo
Delicious
StumbleUpon
Yammer
Reddit
Technorati
FriendFeed
Email


Zum Anfang