您尚未登录。

楼主 #1 2019-10-04 21:46:43

runner111
会员
注册时间: 2019-10-03
已发帖子: 3
积分: 3

Freetype 内存回收

我用Freetype 在嵌入式上打印汉字,逻辑是Freetype得到汉字的8位灰度图后,我用这个灰度图建立一个ARGB8888的汉字图像。
我的问题是,如何把freetype的汉字buffer清掉?是必须调FTC_Manager_Done和FT_Done_FreeType吗?这样每写一个汉字
都需要重新初始化,感觉效率太低了。有什么好方法?谢谢

离线

楼主 #3 2019-10-05 09:11:39

runner111
会员
注册时间: 2019-10-03
已发帖子: 3
积分: 3

Re: Freetype 内存回收

没有GUI是我自己写的,所以我不知道Freetype能不能管理内存,实际上我每次取出ftsbrec之后,就会把内容复制,这个buffer实际上就没用了。
但是没看到哪里会清理缓存,我缓存倒是开了1M。
FTC_Manager_New(ctx->ftlib, 0, 0, 1000000,
                        (FTC_Face_Requester)_ftfont_cbFaceRequester,
                        NULL, &ctx->ftmgr)

离线

楼主 #4 2019-10-05 09:29:41

runner111
会员
注册时间: 2019-10-03
已发帖子: 3
积分: 3

Re: Freetype 内存回收

int ftfont_rander(unsigned long u32c, FontCharRec *fcr){
    struct FTContext *ctx = &g_ftctx;
    FT_UInt glyph_index;
    FTC_SBitRec *ftsbrec;
   
    if(ctx->ftmgr == NULL){
        return 1;
    }
    /* Request face object from cache
    if (FTC_Manager_LookupFace(ctx->ftmgr, ctx, &ctx->ftface)) {
        return 2;
    }*/
   
    // Request size object from cache
    if (FTC_Manager_LookupSize(ctx->ftmgr, &ctx->ftscaler, &ctx->ftsize)) {
        return 3;
    }
   
    // Request glyph index from cache
    glyph_index = FTC_CMapCache_Lookup(ctx->ftcache, ctx, 0, u32c);
 
    // Request bitmap from cache
    if (FTC_SBitCache_Lookup(ctx->ftsbcache, &ctx->ftitype, glyph_index, &ftsbrec, NULL)) {
        return 4;
    }
   
    fcr->w = ftsbrec->width;
    fcr->h = ftsbrec->height;
    fcr->left = ftsbrec->left;
    fcr->top = ftsbrec->top;
    fcr->pitch = ftsbrec->pitch;
    fcr->w_adv = ftsbrec->xadvance;
    fcr->h_adv = ftsbrec->yadvance;
    fcr->buffer = ftsbrec->buffer;
    return 0;
}

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn