每次都重新讀字模是很費時的,比如前面的例子,"c++" 裡的兩個'+' 就讀兩次字模,效率可以想象。
乙個好的辦法是把已讀出來的字模快取起來,下次再遇到這個字時就不用從字型引擎裡讀取了,agg提供的font_cache_manager類就是 負責這項工作的。
標頭檔案#include "agg_font_cache_manager.h" 型別
template
class font_cache_manager;
模板引數fontengine指定管理器所用的字型引擎。另外構造引數也是fontengine。
成員方法
const glyph_cache* glyph(unsigned glyph_code);
獲得字模並快取,glyph_cache類的定義是:
struct glyph_cachepath_adaptor_type& path_adaptor();;
字型引擎的path_adaptor_type例項
gray8_adaptor_type& gray8_adaptor();
gray8_scanline_type& gray8_scanline();
字型引擎的gray8_adaptor_type例項以及對應的scanline
mono_adaptor_type& mono_adaptor();
mono_scanline_type& mono_scanline();
字型引擎的mono_adaptor_type例項以及對應的scanline
void 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++) }
示例**2-作為頂點源渲染:
typedef agg::font_engine_win32_tt_int16 fe_type;
fe_type font(getdc(0));
typedef agg::font_cache_managerfcman_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++) }
顯示效果
布局管理器 網格袋布局管理器
網格袋布局管理器中的約束條件constrains中有如下字段需要設定 1 constrains.gridx和constrains.gridy 這兩個欄位僅用於指定元件的起始網格座標。2 constrains.gridwidth和constrains.gridheight 這兩個字段用於指定元件所佔網...
儲存管理器
cpu配置儲存管理器 cpu讀操作發命令給儲存管理器,儲存管理器根據配置讀取資料 nand flash啟動方式,開機片內sram拷貝nand flash前4k執行,在這4k的程式裡需要完成sram sdram跳轉 s3c2440有8個bank,即8個片選訊號,直連可以接8個記憶體類外設 sdram,...
布局管理器
jframe 內容面板在預設的情況下自動使用邊界布局管理器。1.邊界布局 borderlayout 所謂的borderlayout 就是把邊界劃分為東西南北中,南北要貫通,中間最大,不僅指地方最大,也指權利最大,當東西南北不存在時可占領他們,也就是說中間是可以占領周邊的,但周邊是絕不能占領中間的。邊...