我将d213ecv的luban sdk demo中视频播放页面的bg_dark替换成一个带一块全透明矩形的png图片,发现运行起来透明区域变成白色了,video图层的内容完全不可见被ui层遮挡;这是我带中间矩形区域全透明的png图片,
代码修改仅仅修改这一行
//lv_img_set_src(img_bg, FAKE_IMAGE_NAME(bg_dark));
lv_img_set_src(img_bg, LVGL_PATH(main.png));
运行效果如下图所示:
最近编辑记录 ChouBangYing (2025-09-29 17:19:59)
离线
参考https://whycan.com/t_9283.html,添加三行代码
+ lv_style_init(&style_scr_act);
+ lv_style_set_bg_opa(&style_scr_act, LV_OPA_TRANSP);
+ lv_obj_add_style(lv_scr_act(), &style_scr_act, 0);
lv_img_set_src(img_bg, LVGL_PATH(main.png));
需要设置一下lvgl的背景为透明,虽然矩形框为透明,但是背景不透明,所以显示不出来。
显示如下所示,透明矩形区域正常显示了video层
但是它那个.fake的bg_dark并没有设这个,也行,不晓得为啥子
离线
您提到的这个情况,是因为我们的显示系统采用了分层渲染机制。简单来说,画面由底层的视频层(video layer)和上层的UI层(UI layer)叠加合成。
* **根本原因**:UI层默认会覆盖在视频层之上。在最终合成时,系统会计算每个层级的像素,特别是UI层每个像素的Alpha(透明度)值。如果UI层某个区域的Alpha值不为0(即不完全透明),它就会遮挡住下层的视频内容。
* **问题分析**:当您叠加一张透明的PNG图片时,虽然图片本身有透明区域,但UI层上该位置**原本已经存在不透明的UI元素**。在合成过程中,不透明的UI元素像素与您添加的透明PNG像素进行混合,结果仍然是**不透明**的,因此无法透出下层的视频画面。
**核心要点总结**:要让视频透过UI层显示出来,关键在于确保UI层上对应区域的**最终合成结果**是透明的。仅仅放置一张透明图片,如果该区域已被其他不透明的UI元素占据,是无法实现透显效果的。
离线