关于增加透明度底色变黑的问题

预期效果是这样的

我的关键代码如下
lv_obj_t *img = lv_img_create(lv_scr_act());
lv_obj_set_style_bg_opa(img, LV_OPA_TRANSP, 0);
lv_obj_set_style_img_opa(img, LV_OPA_10, LV_STATE_DEFAULT);
lv_img_set_src(img, &left_mirror_bright);
lv_obj_center(img);

// lv_obj_set_style_bg_opa(lv_scr_act(), LV_OPA_TRANSP, 0);

不要最后一行的代码是这样的

最后一行放开是这样的

周围的颜色都是摄像头出的图,我想让中间的图片设置一定的透明度,然后不遮挡摄像头的出图,就如四周的效果那样无遮挡,具体效果图如图一的左下角,图一是别人用qt做出来的

图片是用在线工具转化为了cf-true-color-alpha ,带透明度的格式,对应的宏也已经打开,请问老师有啥解决办法吗

左下角为预期效果图,补充一下,谢谢各位老师的指导

@ 100ask_lvgl_fae

@100ask_lvgl_fae

@100ask_lvgl_fae 周老师你好,麻烦你有空看下

改为这样:

lv_obj_t *img = lv_img_create(lv_scr_act());
lv_obj_set_style_bg_opa(img, LV_OPA_TRANSP, 0);
lv_obj_set_style_img_opa(img, LV_OPA_10, LV_STATE_DEFAULT);
lv_img_set_src(img, &left_mirror_bright);
lv_obj_center(img);

lv_obj_set_style_bg_opa(lv_scr_act(), LV_OPA_TRANSP, 0);
lv_disp_set_bg_opa(NULL, LV_OPA_TRANSP);

参考阅读: https://lvgl.100ask.net/8.4/overview/display.html#transparent-screens

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);
}

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);

在屏幕初始化前加上这个,问题得到解决

1 个赞

谢谢周老师,问题已解决