Android字體渲染有關概念

Canvas:

畫布是應用程序用來繪製Widget或圖形等元素的地 方。Froyo和Gingerbread上,畫布通過Skia來繪製。
Honeycomb及以後的版本,HWUI被加入了進來,提供了GPU加速支持。在 Ice Cream Sandwich及以後的版本上,HWUI缺省用於圖形的繪製。

Skia:

Skia是一組2D繪圖的API,它完全通過軟件實現。由於性能方面的原因,Skia逐漸被HWUI所替代。
(skia:軟件實現的繪圖庫。已經將其直接繪製到了Framebuffer上)

HWUI:

frameworks\base\libs\hwui
HWUI 可以使UI組件使用GPU加速。HWUI是在Honeycomb中引入進來的,目的是使交互更加快速,及時響應,流暢。在大分辨率的平板電腦上,通過 Skia來繪製動畫,會佔用很高的CPU資源,進而拖慢整個系統。HWUI需要支持OpenGL ES 2.0的GPU,不能通過軟件模擬。(hwui:是代替skia實現基於gpu的繪圖和描字的庫)

SkBlitter:

不是單獨的一個類,指代了一系列根據圖像格式、是否包含Shader等區分出來的一系列子類。這一族類執行大塊頭的渲染任務,把像素繪製上去。

HarfBuzz:

波斯語حرف‌باز‎的寬式拉丁化轉寫,原意“Opentype”[1])是用於文字成型的軟件開發庫,用以轉換Unicode文字到字形指標及方位的過程。最近的HarfBuzz(New HarfBuzz)以多種字體技術爲處理目標,而第一版(Old HarfBuzz)只處理OpenType字體。[2] New HarfBuzz只提供功能性的文字成型,而且不提供文字輸出及渲染,需要其他庫的支持,Pango(含有HarfBuzz)可以用於高級的文字輸出,FreeType或Anti-Grain Geometry可以用於文字渲染。根據開發者的安排,New HarfBuzz的目標是讓HarfBuzz變得漂亮、靈活、高效且便攜的。一些潛在的應用適宜使用HarfBuzz:GUI工具箱、網頁瀏覽器、文字處理軟件、設計工具、字體設計工具、終端模擬器、文檔批處理器和TeX引擎。(harfbuzz:將字體排列,最明顯的從右到左的排列就是harfbuzz實現的)

字庫ttf/otf:

字庫文件,其中存放了字形的輪廓信息,還會有更高級的Hintting和抗鋸齒信息。

Freetype:

將字體光柵化。將uicode代表的字形碼從ttf或者otf字庫中取出字的輪廓,輸出的是一個位圖。其中Hinting和抗鋸齒都是都美化輸出的結果信息,使其更好看一些。

Cmap:

有一個問題,字符如何在TTF文件中找到自己的字形呢,見下面的說明:
詳細說明一下cmap表,因爲這個表是最重要的。由於存在不同的系統和編碼集,cmap表內涵多個子表,每個子表包含的基本信息有系統ID、編碼集以及在表的偏移量。一般系統ID有3和1,前者是Windows,後者是Macintosh。一般而言,TTF文件至少包含兩張子表,即Macintosh的Roman體系(PlatformID=1, Encoding=0)和Windows的UGI體系(PlatformID=3, Encoding=1),其中Encoding=1就是Unicode編碼。這些子表中保存了字符內碼到glyph index的對應。拿到glyph index的值可以到表loca中查到對應glyph表glyf中的偏移。

字符影射表(charmap):

字符對應的字體數據稱爲glyph,字體文件中通常帶有一個字符映射表,用來把字符映射到對應glyph的索引值。因爲字符集的編碼方式有多種,所以可以存在多個子映射表,以支持從不同編碼的字符到glyph索引的映射。如果某個字符沒有對應的glyph,返回索引0,glyph 0通常顯示一個方塊或者空格。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章