共用方式為


理由、Kerning 和間距

從Windows 8開始,DirectWrite提供一些功能,可讓您控制基本的印刷樣式、版面配置和間距功能,例如字元間距、配對 kerning 和對齊。

字元間距

字元間距也稱為「追蹤」,是文字執行中字元之間的間距。

以下是追蹤的範例。 第一行不會對文字套用任何追蹤。 第二行會增加字元間距,而第三行會減少字元間距。

相同文字的三個範例,沒有追蹤、更多間距和較少的間距。

從Windows 8開始,DirectWrite在這裡新增這些方法來控制文字中的字元間距。

如果您使用DirectWrite版面配置,您可以使用IDWriteTextLayout1::GetCharacterSpacingIDWriteTextLayout1::SetCharacterSpacing方法進行此用途。

使用 GetCharacterSpacing 方法來判斷目前的字元間距,並傳回目前字元、字元前後的間距、最小進階寬度,以及包含剩餘文字開始位置和長度資訊的 DWRITE_TEXT_RANGE 結構。

使用DWriteTextLayout1介面上的SetCharacterSpacing,將您自己的字元間距套用至版面配置中的文字。 SetCharacterSpacing方法會採用字元前後所需的空間量、允許的最小進階,以及定義要套用間距之範圍的DWRITE_TEXT_RANGE

如果您使用自訂版面配置,DirectWrite支援使用IDWriteTextAnalyzer1::ApplyCharacterSpacing設定字元間距。 如果您需要自訂文字版面配置,才能進階控制版面配置,請使用此方法。 此方法可讓您提供 ApplyCharacterSpacing 的前置和尾端間距、最小進階寬度、叢集對應長度、字元數目、從字元範圍對應到字元範圍,以及使用自訂版面配置時每個圖像的進階寬度。 方法會傳回修改的字元前移和 DWRITE_GLYPH_OFFSET 列舉,並將新的位移移至每個圖像的來源。

Kerning

Kerning 是字組或三倍字母之間的內容間距調整。 字元集之間的特定間距會增加可讀性,並讓文字看起來更好。 kerning 和字元間距之間的重要差異在於字母間距與空格的文字無關,而在特定字元組之間使用 kerning,如字型中所定義。

她的影像是 Kerning 的範例。 頂端線上的 A加值稅AR 字會經過 Kerned,讓文字看起來更自然。 如您在字元周圍的紅色方塊中所見,前四個字母之間會套用更多間距,而結尾上的 R 在前面會有更多空間。 沒有 kerning 的原始文字位於第二行。 此範例中的 kerning 可讓字組更容易閱讀且更自然。

相同字組的範例,其中未套用 kerning。

字型 kerns 儲存在 kern 資料表中的字元組之間,字元會前進,DirectWrite剖析該資料表,並透過 kerning API 傳回信息給您。

如果您想要知道字型是否支援配對 Kerning,您可以使用 IDWriteFontFace1::HasKerningPairs 方法。 如果字型支援 kerning 組,這個方法會傳回 bool 值 1。

IDWriteFontFace1也有方法可讓您存取字元索引的 Kerning 配對調整。 GetKerningPairAdjustments可讓您輸入字元索引的陣列,DirectWrite傳回字元進階調整的陣列。 如果字型不支援 kern 表格,此方法會傳回字元進階調整的零。

如果您使用DirectWrite版面配置,IDWriteTextLayout1介面上有兩種方法可讓您設定配對 Kerning,並深入瞭解版面配置中的配對 Kerning。 SetPairKerning方法會採用布林值標記法,指出您是否要啟用配對 Kerning,以及定義要套用文字範圍的DWRITE_TEXT_RANGE。 如果您想要瞭解是否在文字範圍上啟用配對 Kerning,您可以使用 GetPairKerning 方法,此方法會採用目前的位置,並傳回對應至是否啟用配對 Kerning 的 bool,以及 Kerning 設定所套用的文字範圍。

理由

理由是對齊文字的程式,可藉由增加字元或字元叢集之間的進階,或新增對齊字元來達到相同的效果,以填滿資料行中的所有空間。 一般而言,這可藉由判斷需要新增到文字行的位置,以及在這些中斷的機會中插入間距字元來完成。 在拉丁文腳本中,這些間距元素也可以透過增加元素之間的進階寬度來對齊,而阿拉伯文中的文字會以 kashida 對齊。 以下是阿拉伯文和拉丁文腳本的範例,兩者皆對齊且不對齊。

阿拉伯文和拉丁文腳本的範例,兩者皆對齊且不對齊。

從Windows 8開始,DirectWrite有許多方法可讓您證明應用程式中的文字。

DWRITE_TEXT_ALIGNMENT列舉中有額外的值。 您可以使用SetTextAlignment方法,並傳入DWRITE_TEXT_ALIGNMENT_JUSTIFIED常數,並DirectWrite對齊文字,並插入腳本的適當理由字元。

如果您使用自訂版面配置有一些可用的方法,因此您可以利用理由。 DirectWriteIDWriteTextAnalyzer1介面上有三種方法,可用來將理由新增至自訂版面配置。

第一種方法是 GetJustificationOpportunities,它會採用您想要對齊的文字,並傳回 DWRITE_JUSTIFICATION_OPPORTUNITY 結構,其中概述可新增理由字元來證明文字。

第二個函式是 JustifyGlyphAdvances,它會對齊圖像的陣列前進,使其符合線條寬度。 這個方法會採用GetJustificationOpportunities產生的DWRITE_JUSTIFICATION_OPPORTUNITY結構、圖像前進和字元位移。 然後,它會產生對齊圖像的前進,以及包含對齊圖像位移 的DWRITE_GLYPH_OFFSET 列舉。

第三個函式是 GetJustifiedGlyphs,它會填入複雜字集的新字元,其中理由會增加字元的前進。 如果腳本具有GetScriptProperties所傳回的特定理由字元,則只需要呼叫GetJustifiedGlyphs。 這個方法會取得字型、文字長度、字元大小的 em 大小、文字的腳本、字元數目、叢集對應、原始圖像前進/位移、對齊圖像前移/位移和圖像屬性的相關資訊。 方法會傳回實際的圖像計數、更新的叢集對應、更新的字元索引,以及插入的對齊字元、更新的字元位移,以及更新的字元。