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通常显示一个方块或者空格。

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