齐白石的弟子擅长画牛:AGG AGG与FreeType库

来源:百度文库 编辑:九乡新闻网 时间:2024/04/29 19:02:20
AGG AGG与FreeType库2010-07-11 22:10

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的源代码:

  1. typedef agg::font_engine_freetype_int16 fe_type;
  2. typedef fe_type::path_adaptor_type vs_type;
  3. fe_type fe;
  4. if(!fe.load_font("c:\\windows\\fonts\\simhei.ttf",0,agg::glyph_ren_outline)) return;
  5. fe.height(36.0);
  6. fe.flip_y(true);
  7. fe.hinting(true);
  8. wchar_t *s = L"C++编程";
  9. std::vector data;
  10. vs_type vs;
  11. agg::conv_curve ccvs(vs);
  12. int x=20,y=100;
  13. for(;*s;s++)
  14. {
  15.     if(!fe.prepare_glyph(*s)) continue;
  16.      data.resize( fe.data_size() );
  17.      fe.write_glyph_to( &data[0] );
  18.      vs.init(&data[0], data.size(), x, y);
  19.      x += fe.advance_x();
  20.      y += fe.advance_y();
  21.      ras.add_path(ccvs);
  22.      agg::render_scanlines_aa_solid(ras,sl,renb,agg::rgba(0,0,1));