ui_lite文字不显示问题分析处理
·
1. 问题简介
当js应用中使用text组件显示文字时,存在不显示问题,在其他位置或者通过变更复显也无法显示。
OpenHarmony版本:master
设备: LiteOS-M 设备
日期:2025-11-05
2. 问题详情
- 文字送显前会获取文字数据Bitmap,在获取Bitmap时,会优先从文字缓存中获取(这里主要介绍矢量字体库):
foundation/arkui/ui_lite/frameworks/font/ui_font_vector.cpp

- 当从字体缓存(fontCacheManager)中无法获取到Bitmap时,就会先从字体库中获取后保存到缓存中,再从缓存中获取:

- 从字体中获取数据后,写入到缓存(bufInfo.virAddr)中:

这里的缓存写入存在一个问题,当字体数据faceInfo.face->glyph->bitmap.buffer为空时,前面就已经在bitmap.buffer保存了部分数据,这会导致缓存数据不完整,从而在读取文字数据时返回空导致不显示
3. 处理方法
加载字体库时,通过三方库freetype的FT_Load_Glyph接口获取字体数据,保存到ftFaces_[fontId]中并最终作为faceInfo传递到SetFace方法中。

这里没有对ftFaces_[fontId]内的bitmap.buffer进行判空校验,如果bitmap.buffer为空这里应该返回INVALID_RET_VALUE,因此添加判空

4. 总结
当三方库freetype返回的字体数据时,需要对其进行判空校验,若将错误数据存入缓存,后续文字显示都会存在问题。
更多推荐

所有评论(0)