页次: 1
是这样没错,但因为Littlevgl在显示期间会多次获取width,这样其实一个字也load了好几次呢
mathildawyx 说:yywyai 说:static const uint8_t*
lv_font_get_bitmap_freetype(const struct _lv_font_struct *font, uint32_t unicode_letter)
{
return bitmap;
}static int16_t
lv_font_get_width_freetype(const struct _lv_font_struct *font, uint32_t unicode_letter)
{
/*Check the range*/
if(unicode_letter < font->unicode_first || unicode_letter > font->unicode_last) return -1;
FT_Error err = FT_Load_Char(face, unicode_letter, FT_LOAD_RENDER);
if (err == 0) {
lv_font_freetype.bpp = 8;
lv_font_freetype.bitmap_dx = face->glyph->bitmap_left;
lv_font_freetype.bitmap_dy = lv_font_freetype.monospace - face->glyph->bitmap_top;
lv_font_freetype.bitmap_row = face->glyph->bitmap.rows;
bitmap = face->glyph->bitmap.buffer;
return face->glyph->bitmap.width;
}bitmap = NULL;
return -1;
}代码很简单的,但是修改了部分的LV代码
请问这样的话渲染后的字体文件是用freetype得到bitmap后再通过结构体中的get_bitmap被使用吗?
littlevgl 5.2 5.3中是先调用get_width,然后调用get_bitmap,所以可以在get_width中获得bitmap
static const uint8_t*
lv_font_get_bitmap_freetype(const struct _lv_font_struct *font, uint32_t unicode_letter)
{
return bitmap;
}static int16_t
lv_font_get_width_freetype(const struct _lv_font_struct *font, uint32_t unicode_letter)
{
/*Check the range*/
if(unicode_letter < font->unicode_first || unicode_letter > font->unicode_last) return -1;
FT_Error err = FT_Load_Char(face, unicode_letter, FT_LOAD_RENDER);
if (err == 0) {
lv_font_freetype.bpp = 8;
lv_font_freetype.bitmap_dx = face->glyph->bitmap_left;
lv_font_freetype.bitmap_dy = lv_font_freetype.monospace - face->glyph->bitmap_top;
lv_font_freetype.bitmap_row = face->glyph->bitmap.rows;
bitmap = face->glyph->bitmap.buffer;
return face->glyph->bitmap.width;
}bitmap = NULL;
return -1;
}代码很简单的,但是修改了部分的LV代码
请问这样的话渲染后的字体文件是用freetype得到bitmap后再通过结构体中的get_bitmap被使用吗?
页次: 1