Freigeben über


Begründung, Kerning und Abstand

Ab Windows 8 bietet DirectWrite eine Reihe von Features, mit denen Sie grundlegende Typografie-, Layout- und Abstandsfeatures steuern können, z. B. Zeichenabstand, Paarkerning und Begründung.

Zeichenabstand

Der Zeichenabstand, auch als "Tracking" bezeichnet, ist der Abstand zwischen Zeichen in einer Textausführung.

Hier ist ein Beispiel für die Nachverfolgung. Die erste Zeile wendet keine Nachverfolgung auf den Text an. Die zweite Zeile erhöht den Zeichenabstand, und die dritte Zeile verringert den Zeichenabstand.

drei Beispiele für den gleichen Text ohne Nachverfolgung, mehr Abstand und weniger Abstand.

Ab Windows 8 fügt DirectWrite hier diese Methoden hinzu, um den Abstand von Zeichen im Text zu steuern.

Wenn Sie das DirectWrite-Layout verwenden, können Sie zu diesem Zweck die Methoden IDWriteTextLayout1::GetCharacterSpacing und IDWriteTextLayout1::SetCharacterSpacing verwenden.

Verwenden Sie die GetCharacterSpacing-Methode , um den aktuellen Zeichenabstand zu bestimmen. Sie gibt das aktuelle Zeichen, den Abstand vor und nach dem Zeichen, die minimale Vorwärtsbreite und eine DWRITE_TEXT_RANGE Struktur zurück, die Informationen über die Anfangsposition und Länge des verbleibenden Texts enthält.

Verwenden Sie setCharacterSpacing auf einer DWriteTextLayout1-Schnittstelle , um ihren eigenen Zeichenabstand auf den Text im Layout anzuwenden. Die SetCharacterSpacing-Methode nimmt den gewünschten Abstand vor und nach dem Zeichen, den minimalen zulässigen Abstand und einen DWRITE_TEXT_RANGE ein, der den Bereich definiert, um den Abstand anzuwenden.

Wenn Sie ein benutzerdefiniertes Layout verwenden, unterstützt DirectWrite das Festlegen des Zeichenabstands mit IDWriteTextAnalyzer1::ApplyCharacterSpacing. Verwenden Sie diese Methode, wenn Sie ein benutzerdefiniertes Textlayout benötigen, um eine erweiterte Kontrolle über Ihr Layout zu erhalten. Mit dieser Methode können Sie ApplyCharacterSpacing mit dem führenden und nachgestellten Abstand, der minimalen Vorwärtsbreite, der Länge der Clusterzuordnung, der Anzahl der Glyphen, der Zuordnung von Zeichenbereichen zu Glyphen und der erweiterten Breite der einzelnen Glyphen bereitstellen, wenn Sie ein benutzerdefiniertes Layout verwenden. Die -Methode gibt die geänderten Glyphenvorsprünge und eine DWRITE_GLYPH_OFFSET-Enumeration mit den neuen Offsets zum Ursprung jeder Glyphe zurück.

Kerning

Kerning ist die kontextbezogene Abstandsanpassung zwischen Buchstabenpaaren oder Triplets. Ein bestimmter Abstand zwischen Zeichensätzen kann die Lesbarkeit erhöhen und den Text besser aussehen lassen. Der wichtige Unterschied zwischen Kerning und Zeichenabstand ist die Tatsache, dass der Buchstabenabstand gegenüber dem Text, den er leert, agnostisch ist, während kerning in bestimmten Situationen zwischen bestimmten Zeichenpaaren verwendet wird, wie in der Schriftart definiert.

Das Bild sie ist ein Beispiel für kerning. Das Wort AVATAR in der obersten Zeile wird gekernt, um das Wort natürlicher aussehen zu lassen. Wie Sie anhand der roten Felder um die Zeichen sehen können, wird zwischen den ersten vier Buchstaben mehr Abstand angewendet, während das R am Ende mehr Platz vor sich hat. Der originale Text ohne Kerning befindet sich in der zweiten Zeile. Das Kerning in diesem Beispiel macht das Wort lesbarer und natürlicher.

Ein Beispiel für dasselbe Wort mit und ohne angewendetes Kerning.

Das Zeichen wechselt zwischen Zeichenpaaren, die die Schriftartkerne in der Kerntabelle gespeichert sind, und DirectWrite analysiert diese Tabelle und gibt die Informationen über die Kerning-APIs an Sie zurück.

Wenn Sie wissen möchten, ob eine Schriftart das Kerning von Paaren unterstützt, können Sie die IDWriteFontFace1::HasKerningPairs-Methode verwenden. Diese Methode gibt den bool-Wert 1 zurück, wenn die Schriftart Kerningpaare unterstützt.

Das IDWriteFontFace1 verfügt auch über eine Methode, mit der Sie zugriff auf die Kerningpaaranpassungen für Glyphenindizes erhalten können. Mit GetKerningPairAdjustments können Sie ein Array von Glyphenindizes eingeben, und DirectWrite gibt ein Array von Glyphenvorausstellungen zurück. Wenn eine Schriftart die Kerntabelle nicht unterstützt, gibt die Methode Nullen für die Glyphenvorbereinigungen zurück.

Wenn Sie das DirectWrite-Layout verwenden, gibt es zwei Methoden auf der IDWriteTextLayout1-Schnittstelle, mit denen Sie das Paarkerning festlegen und mehr über das Paarkerning im Layout erfahren können. Die SetPairKerning-Methode akzeptiert eine boolesche Darstellung, ob das Paarkerning aktiviert sein soll, und einen DWRITE_TEXT_RANGE , der den Textbereich definiert, auf den es angewendet werden soll. Wenn Sie erfahren möchten, ob das Paarkerning in einem Textbereich aktiviert ist, können Sie die GetPairKerning-Methode verwenden, die die aktuelle Position einnimmt und einen Bool zurückgibt, der dem aktivierten Paarkerning entspricht, und dem Textbereich, für den die Kerningeinstellung gilt.

Begründung

Die Begründung ist der Prozess der Ausrichtung von Text, sodass er den gesamten Raum innerhalb einer Spalte ausfüllt, indem die Fortschritte zwischen Zeichen oder Glyphenclustern erhöht oder Berechtigungszeichen hinzugefügt werden, um den gleichen Effekt zu erzielen. Im Allgemeinen wird dies erreicht, indem bestimmt wird, wo einer Textzeile Leerzeichen hinzugefügt werden müssen, und das Einfügen von Abstandszeichen in diese Breaking-Opportunities. Diese Abstandselemente können sich auch unterscheiden, in lateinischen Schriften wird Text durch eine Erhöhung der Vorschubbreiten zwischen Elementen gerechtfertigt, während text im Arabischen mit einer Kashida gerechtfertigt wird. Hier ist ein Beispiel für die arabische und lateinische Schrift sowohl gerechtfertigt als auch nicht gerechtfertigt.

ein Beispiel für eine sowohl gerechtfertigte als auch nicht gerechtfertigte arabische und lateinische Schrift.

Ab Windows 8 verfügt DirectWrite über eine Reihe von Methoden, mit denen Sie Text in Ihren Apps rechtfertigen können.

Die DWRITE_TEXT_ALIGNMENT-Enumeration enthält einen zusätzlichen Wert. Sie können die SetTextAlignment-Methode verwenden und die DWRITE_TEXT_ALIGNMENT_JUSTIFIED-Konstante übergeben, DirectWrite den Text rechtfertigt und das entsprechende Begründungszeichen für das Skript einfügt.

Wenn Sie ein benutzerdefiniertes Layout verwenden, stehen eine Reihe von Methoden zur Verfügung, damit Sie die Vorteile der Begründung nutzen können. DirectWrite verfügt über drei Methoden auf der IDWriteTextAnalyzer1-Schnittstelle, mit denen Sie einem benutzerdefinierten Layout eine Begründung hinzufügen können.

Die erste Methode ist GetJustificationOpportunities, die den text akzeptiert, den Sie rechtfertigen möchten, und gibt eine DWRITE_JUSTIFICATION_OPPORTUNITY Struktur zurück, die beschreibt, wo Begründungszeichen hinzugefügt werden können, um den Text zu rechtfertigen.

Die zweite Funktion ist JustifyGlyphAdvances, die ein Array von Glyphenfortschritten rechtfertigt, sodass sie der Linienbreite entsprechen. Diese Methode übernimmt die DWRITE_JUSTIFICATION_OPPORTUNITY Struktur, die GetJustificationOpportunities generiert, die Glyphe und die Glyphenoffsets. Anschließend werden die gerechtfertigten Glyphenfortschritte und eine DWRITE_GLYPH_OFFSET-Enumeration generiert, die die gerechtfertigten Glyphenoffsets enthält.

Die dritte Funktion ist GetJustifiedGlyphs, die die neuen Glyphen für komplexe Skripts ausfüllt, bei denen die Begründung die Fortschritte für Glyphen erhöht hat. GetJustifiedGlyphs muss nur aufgerufen werden, wenn das Skript ein bestimmtes Berechtigungszeichen aufweist, wie von GetScriptProperties zurückgegeben. Diese Methode akzeptiert Informationen über die Schriftart, die Länge des Texts, die Größe der Glyphen, das Skript des Texts, die Anzahl der Glyphen, die Clusterzuordnung, die ursprünglichen Glyphenvorsprünge/-offsets, die gerechtfertigten Glyphenvorsprünge/-offsets und die Glypheneigenschaften. Die Methode gibt die tatsächliche Glyphenanzahl, die aktualisierte Clusterzuordnung, aktualisierte Glyphenindizes mit eingefügten Berechtigungsglyphen, aktualisierte Glyphenoffsets und aktualisierte Glyphenvorsprünge zurück.