预期效果是这样的
我的关键代码如下
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 ,带透明度的格式,对应的宏也已经打开,请问老师有啥解决办法吗
改为这样:
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 个赞