AGG AGG与FreeType库

Linux、 FreeBSD等开源操作系统里一般使用FreeType来显示文字,Windows下的一些软件如Foxit也有FreeType的身影。

AGG的font_engine_freetype_int16字 体引擎就使用FreeType来取得字模,在Windows里,在使用font_engine_freetype_int16之前,我们得先编译好 FreeType:

  1. www.freetype.org下 载FreeType2,偶下载的是目前最新的freetype-2.3.9,解压。
  2. 以VC2005 Express为例,直接打开/builds/win32/vc2005里的freetype.sln编译即可。(不过这个版本的 freetype.sln好 像好点问题,要用文本编辑器打开,把第一行“Microsoft Visual Studio Solution File, Format Version 10.00”后面的“10.00”改成“9.00”才行
  3. 对于其它编译器,如C++Builder,直接把/docs/INSTALL.ANY里列出的文件加入项目即可(不过加入这些东 西还真是比较麻烦,可以点 这里下载C++Builder的FreeType2库编译工程)。
  4. 把编译后的库文件(在/objs/win32里,注意编译版本)加入项目,并设置include路径为freetype- 2.3.9/include就可 以了
AGG使用FreeType的源代码:

typedef agg::font_engine_freetype_int16 fe_type;
typedef fe_type::path_adaptor_type vs_type;

fe_type fe;
if(!fe.load_font("c://windows//fonts//simhei.ttf",0,agg::glyph_ren_outline)) return;
fe.height(36.0);
fe.flip_y(true);
fe.hinting(true);

wchar_t *s = L"C++编程";
std::vector<agg::int8u> data;
vs_type vs;
agg::conv_curve<vs_type> ccvs(vs);
int x=20,y=100;
for(;*s;s++)
{
 if(!fe.prepare_glyph(*s)) continue;
 data.resize( fe.data_size() );
 fe.write_glyph_to( &data[0] );
 vs.init(&data[0], data.size(), x, y);
 x += fe.advance_x();
 y += fe.advance_y();
 ras.add_path(ccvs);
 agg::render_scanlines_aa_solid(ras,sl,renb,agg::rgba(0,0,1));
}

 

这份文档提供了FreeType 2函数设计与实现的细节。本文档的目标是让开发人员更好的理解FreeType 2是如何组织的,并让他们扩充、定制和调试它。 首先,我们先了解这个的目的,也就是说,为什么会写这个: * 它让客户应用程序方便的访问字体文件,无论字体文件存储在哪里,并且与字体格式无关。 * 方便的提取全局字体数据,这些数据在平常的字体格式中普遍存在。(例如:全局度量标准,字符编码/字符映射表,等等) * 方便的提取某个字符的字形数据(度量标准,图像,名字,其他任何东西) * 访问字体格式特定的功能(例如,SFNT表,多重控制,OpenType轮廓表) Freetype 2的设计也受如下要求很大的影响: * 高可移植性。这个必须可以运行在任何环境中。这个要求引入了一些非常激烈的选择,这些是FreeType2的低级系统界面的一部分。 * 可扩展性。新特性应该可以在极少改动基础代码的前提下添加。这个要求引入了非常简单的设计:几乎所有操作都是以模块的形式提供的。 * 可定制。它应该能够很容易建立一个只包含某个特定项目所需的特性的版本。当你需要集成它到一个嵌入式图形的字体服务器中时,这是非常重要的。 * 简洁高效。这个的主要目标是只有很少cpu和内存资源的嵌入式系统。 这份文档的其他部分分为几个部分。首先,一些章节介绍了的基本设计以及Freetype 2内部对象/数据的管理。 接下来的章节专注于的定制和与这个话题相关的系统特定的界面,如何写你自己的模块和如何按需裁减初始化和编译。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值