您的位置:首页 > 其它

【渲染引擎】agg字体介绍

2016-06-28 13:59 661 查看
agg字体可以使用第三方字体库,比如Freetype或者window下的字体。当你选择使用某种字体的时候,就必须把相应字体的头文件包含进去。

#include <agg_font_win32_tt.h> //for window
#include <agg_font_freetype.h> //for freetype


这俩个文件其实是提供了一个接口给agg,封装了具体字体库的实现。这样就屏蔽了具体的字体库的不同。这里只介绍如何使用freetype。freetype是一个字体库,现在freetype已经是freetype2了。

agg在绘制字体的时候有2种方式,一种是在渲染层(Scanline Rasterizer),一种是在顶点层。agg的具体层次划分在上一篇文章agg介绍中已有说明。在这里不在展开。

在使用字体的时候需要首先加载初始化字体。freetype提供了load_font方法,用以字体引擎加载具体的字体。

bool load_font(const char* font_name,unsigned face_index,
glyph_rendering ren_type,const char* font_mem = 0,
const long font_mem_size = 0);


可以看出该方法主要接受三个参数,font_name字体名,选择哪个字体face_index,包装类型ren_type。

对于face_index来说,一个字体文件里可能有多种字体样式,其实就是字体外观。像‘Times New Roman Regular’和‘Times New Roman Italic’就是俩种不同的字体样式。face_index就是告诉引擎具体采用哪一种样式。一般都设置为0。

对于ren_type来说,其类型为glyph_rendering,是一个枚举类型属于agg库的一部分。其定义在agg_font_cache_manager.h头文件中,共有五个属性值:

enum agg::glyph_rendering{
glyph_ren_native_mono,   //对应mono_adaptor_type
glyph_ren_native_gray8,   //对应gray8_adaptor_type
glyph_ren_outline,    //对应path_adaptor_type
glyph_ren_agg_mono,   //对应mono_adaptor_type
glyph_ren_agg_gray8    //对应gray8_adaptor_type
};


该参数主要是告诉字体引擎字体的包装形式,相应的在freetype里也有相应的参数与其对应,在上面的注释中也分别说明了如何和freetype中的类型进行对应的。

对于绘制字体的时候,有俩个字体大小一个就是你给定的字体大小,另外一个就是绘制的时候真是字体大小。这个很好理解,比如对于“我”和“1”俩个字体占据的字体宽度肯定不同,所以在绘制字体的时候有个获取真是字体宽度的流程。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  AGG freetype 渲染引擎