《LVGL视频播放界面实现方法》这篇博客,用了这个方法有个问题,就是字幕显示在上层的时候,会有字体渲染问题,字符底下会有黑色小块。这个要怎么解决?
播放视频用的不是lvgl库提供的方法,用的ffmpeg播放的视频,只有显示的文本字幕才用了lvgl。
/* 初始化屏幕风格 */
static lv_style_t style_scr_act;
if (style_scr_act.prop_cnt == 0) {
lv_style_init(&style_scr_act);
/* 默认不是透明的,后面按需要切换即可 */
lv_style_set_bg_opa(&style_scr_act, LV_OPA_COVER);
/* 一定要应用风格,不然也是没有效果的 */
lv_obj_add_style(lv_scr_act(), &style_scr_act, 0);
}
/* 这里根据按钮状态,切换不同风格,一种是UI能够透明看到底下的视频,一种是UI覆盖视频,视频就看不到了 */
if (lv_obj_has_state(btn, LV_STATE_CHECKED)) {
/* 这里切换为UI透明 */
lv_label_set_text(label, "Stop");
/* 这里设置屏幕是透明的 */
lv_disp_get_default()->driver->screen_transp = 1;
/* 这里设置屏幕背景是透明的 */
lv_disp_set_bg_opa(lv_disp_get_default(), LV_OPA_TRANSP);
/* 这里清空屏幕,不清空的话,可能不会生效 */
lv_memset_00(lv_disp_get_default()->driver->draw_buf->buf_act,
lv_disp_get_default()->driver->draw_buf->size
* sizeof(lv_color32_t));
/* 这里屏幕风格切换为透明的 */
lv_style_set_bg_opa(&style_scr_act, LV_OPA_TRANSP);
/* 通知风格变化,需要更新 */
lv_obj_report_style_change(&style_scr_act);
} else {
/* 这里切换为UI不透明,也就是覆盖视频 */
lv_label_set_text(label, "Play");
/* 这里设置屏幕是不透明的 */
lv_disp_get_default()->driver->screen_transp = 0;
/* 这里设置屏幕背景是不透明的 */
lv_disp_set_bg_opa(lv_disp_get_default(), LV_OPA_COVER);
/* 这里屏幕风格切换为不透明的 */
lv_style_set_bg_opa(&style_scr_act, LV_OPA_COVER);
/* 通知风格变化,需要更新 */
lv_obj_report_style_change(&style_scr_act);
}
可以试试调整透明度的值,同时试试更新到最新版本,较旧的LVGL版本,可能存在一些字体渲染的bug
可以更换视频播放组件或视频文件看看是否一如存在该问题,以排除是否是兼容性的问题,其次如果该问题还存在,可以更换字幕显示的方法,考虑到你是使用FFmpeg播放的视频,可以使用ffmpeg 本身添加字幕。
这种字体渲染问题通常是由于字体的透明度(alpha 值)不正确导致的。您可以尝试通过修改字体透明度的方式来解决这个问题。
在 LVGL 中,可以通过 lv_obj_set_style_local_text_opa 函数来设置对象的文本透明度。这个函数的第一个参数是对象指针,第二个参数是样式类型,第三个参数是具体的透明度值。例如,下面的代码将对象的文本透明度设置为 255:
c
Copy
lv_obj_set_style_local_text_opa(obj, LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, 255);
您可以将这个函数应用到显示字幕的文本对象上,以解决字幕渲染问题。您可以尝试不同的透明度值,以找到最佳的效果。
另外,如果您使用的字体文件本身存在问题,也可能会导致字体渲染问题。在这种情况下,您可以尝试更换不同的字体文件,或者尝试使用 LVGL 中提供的默认字体,看看问题是否得到解决。
这种情况很可能是因为字幕内容的背景和字体颜色之间的对比度过低,导致字体渲染时出现了因硬件限制而产生的色差或者噪点,而出现了黑色小块的情况。解决这个问题的方法可以有以下几种:
调整字幕背景和字体颜色的对比度
尝试更改字幕背景和字体颜色,使其对比度更高,并重新测试应用程序。如果修改后问题得到解决,说明对比度过低是问题的根本原因。
修改字体渲染方式
尝试在字幕显示层上应用一些不同的字体渲染技术或者算法,例如启用抗锯齿(anti-aliasing)或者subpixel rendering,这些方式可以减少字体渲染过程中出现的颜色噪点问题。
修改视频显示方式
尝试调整视频渲染层的设置,例如启用硬件加速或更改视频帧率。这有时可能会减少字幕渲染时出现小像素块的概率,但可能对视频播放的性能和质量造成一些影响。
希望以上解决办法可以帮助到您解决这个问题。如果问题仍然存在,建议您提供更多的相关信息,包括版本、硬件和软件配置,我们可以进一步探讨并找到更好的解决方案。