齐白石闲章:AGG 字体缓存管理器
来源:百度文库 编辑:九乡新闻网 时间:2024/05/01 07:36:37
AGG 字体缓存管理器2010-07-11 22:13
gray8_scanline_type& gray8_scanline();字体引擎的gray8_adaptor_type实例以及对应的Scanlinemono_adaptor_type& mono_adaptor();
mono_scanline_type& mono_scanline();字体引擎的mono_adaptor_type实例以及对应的Scanlinevoid init_embedded_adaptors(const glyph_cache* gl,
double x, double y,
double scale=1.0);初始化上面的adaptor成员实例(与字体引擎的ren_type设置相关)bool add_kerning(double* x, double* y);调整坐标
方式三、使用字体缓存管理器
每次都重新读字模是很费时的,比如前面的例子,"C++" 里的两个'+' 就读两次字模,效率可以想象。
一个好的办法是把已读出来的字模缓存起来,下次再遇到这个字时就不用从字体引擎里读取了,AGG提供的font_cache_manager类就是 负责这项工作的。
头文件
- #include "agg_font_cache_manager.h"
类型
- template
class font_cache_manager;
成员方法
const glyph_cache* glyph(unsigned glyph_code);获得字模并缓存,glyph_cache类的定义是:struct glyph_cache{ unsigned glyph_index; int8u* data; unsigned data_size; glyph_data_type data_type; rect_i bounds; double advance_x; double advance_y;};path_adaptor_type& path_adaptor();字体引擎的path_adaptor_type实例gray8_adaptor_type& gray8_adaptor();
gray8_scanline_type& gray8_scanline();字体引擎的gray8_adaptor_type实例以及对应的Scanlinemono_adaptor_type& mono_adaptor();
mono_scanline_type& mono_scanline();字体引擎的mono_adaptor_type实例以及对应的Scanlinevoid init_embedded_adaptors(const glyph_cache* gl,
double x, double y,
double scale=1.0);初始化上面的adaptor成员实例(与字体引擎的ren_type设置相关)bool add_kerning(double* x, double* y);调整坐标
示例代码1-作为Rasterizer渲染:
- agg::font_engine_win32_tt_int16 font(dc);
- agg::font_cache_manager<
- agg::font_engine_win32_tt_int16
- > font_manager(font);
- font.height(72.0);
- font.width(0);
- font.italic(true);
- font.flip_y(true);
- font.hinting(true);
- font.transform(agg::trans_affine_rotation(agg::deg2rad(4.0)));
- font.create_font("宋体",agg::glyph_ren_agg_gray8);
- double x=10, y=72; //起始位置
- wchar_t *text = L"C++编程网";
- // 画所有字符
- for(;*text;text++)
- {
- //取字模
- const agg::glyph_cache* glyph = font_manager.glyph(*text);
- if(glyph)
- {
- // 初始化gray8_adaptor实例
- font_manager.init_embedded_adaptors(glyph, x, y);
- agg::render_scanlines_aa_solid(font_manager.gray8_adaptor(),
- font_manager.gray8_scanline(),
- renb, agg::rgba8(0, 0, 0));
- // 前进
- x += glyph->advance_x;
- y += glyph->advance_y;
- }
- }
显示效果
示例代码2-作为顶点源渲染:
- typedef agg::font_engine_win32_tt_int16 fe_type;
- fe_type font(GetDC(0));
- typedef agg::font_cache_manager
fcman_type; - fcman_type font_manager(font);
- font.height(72.0);
- font.width(0);
- font.italic(true);
- font.flip_y(true);
- font.hinting(true);
- font.transform(agg::trans_affine_rotation(agg::deg2rad(4.0)));
- font.create_font("宋体",agg::glyph_ren_outline);
- double x=10, y=72; //起始位置
- wchar_t *text = L"C++编程网";
- // 画所有字符
- for(;*text;text++)
- {
- const agg::glyph_cache* glyph = font_manager.glyph(*text);
- if(glyph)
- {
- // 准备*_adaptor
- font_manager.init_embedded_adaptors(glyph, x, y);
- // 先用conv_curve
- typedef agg::conv_curve<
- fcman_type::path_adaptor_type
- > cc_pa_type;
- cc_pa_type ccpath(font_manager.path_adaptor());
- // 画轮廓
- typedef agg::conv_stroke
cs_cc_pa_type; - cs_cc_pa_type csccpath(ccpath);
- agg::rasterizer_scanline_aa<> ras;
- agg::scanline_u8 sl;
- ras.add_path(csccpath);
- agg::render_scanlines_aa_solid(ras, sl, renb, agg::rgba8(0, 0, 0));
- // 前进
- x += glyph->advance_x;
- y += glyph->advance_y;
- }
- }
显示效果
AGG 字体缓存管理器
AGG 渲染缓存(Rendering Buffer)
AGG 使用字体引擎(Font Engine)
管理器
AGG 成果
AGG AGG与FreeType库
AGG 渲染器(Renderers)
AGG 插值器(Interpolator)
任务管理器
hibernate 缓存
AJAX缓存
AGG 光栅化(Scanline Rasterizer)
AGG 线段生成器(Span Generator)
AGG 色彩类线段生成器
AGG 组合类线段生成器
asp.net 2.0 缓存(页面输出缓存)
任务管理器中的进程
系统引导管理器GRUB
任务管理器使用技巧
设置IE缓存大小
如何清除缓存
如何清除缓存?
关于系统缓存
怎么清除DNS缓存?