将lvgl移植到arm_linux平台下,想在fb层使用lvgl做一个部分完全透明的效果,这样可以将下面的视频层的图像显示出来,请问有没有大佬做过?
离线
1. 在lvgl的配置文件中修改宏定义 => lvgl_conf.h , 是用来做图层叠加的,比如OSD之类的功能。
#define LV_COLOR_SCREEN_TRANSP 0
2. 修改源文件 src/lv_hal/lv_hal_disp.c,修改的目的就是把默认的显示变为32位位启用透明。
lv_disp_t * lv_disp_drv_register(lv_disp_drv_t * driver)
=> add lv_obj_set_style(disp->act_scr, &lv_style_transp);
此时假设你的视频输出在/dev/fb1上,而UI的话在/dev/fb0上就能够看到叠加效果了。
最近编辑记录 dean (2019-10-06 23:42:47)
离线
@dean 优秀,感谢分享
离线
1. 在lvgl的配置文件中修改宏定义 => lvgl_conf.h , 是用来做图层叠加的,比如OSD之类的功能。
#define LV_COLOR_SCREEN_TRANSP 0
2. 修改源文件 src/lv_hal/lv_hal_disp.c,修改的目的就是把默认的显示变为32位位启用透明。
lv_disp_t * lv_disp_drv_register(lv_disp_drv_t * driver)
=> add lv_obj_set_style(disp->act_scr, &lv_style_transp);
此时假设你的视频输出在/dev/fb1上,而UI的话在/dev/fb0上就能够看到叠加效果了。
楼主的意思应该是在同一个/dev/fb0 上分为图形层和视频层,希望图形层也就是gui的东西不要挡住视频层的东西
您的意思是#define LV_COLOR_SCREEN_TRANSP 1
然后在src/lv_hal/lv_hal_disp.c 143行下面添加 lv_obj_set_style(disp->act_scr, &lv_style_transp); 么
离线
dean 说:1. 在lvgl的配置文件中修改宏定义 => lvgl_conf.h , 是用来做图层叠加的,比如OSD之类的功能。
#define LV_COLOR_SCREEN_TRANSP 0
2. 修改源文件 src/lv_hal/lv_hal_disp.c,修改的目的就是把默认的显示变为32位位启用透明。
lv_disp_t * lv_disp_drv_register(lv_disp_drv_t * driver)
=> add lv_obj_set_style(disp->act_scr, &lv_style_transp);
此时假设你的视频输出在/dev/fb1上,而UI的话在/dev/fb0上就能够看到叠加效果了。楼主的意思应该是在同一个/dev/fb0 上分为图形层和视频层,希望图形层也就是gui的东西不要挡住视频层的东西
您的意思是#define LV_COLOR_SCREEN_TRANSP 1
然后在src/lv_hal/lv_hal_disp.c 143行下面添加 lv_obj_set_style(disp->act_scr, &lv_style_transp); 么
这个是要CPU和驱动同时都支持才可以
离线
dean 说:1. 在lvgl的配置文件中修改宏定义 => lvgl_conf.h , 是用来做图层叠加的,比如OSD之类的功能。
#define LV_COLOR_SCREEN_TRANSP 0
2. 修改源文件 src/lv_hal/lv_hal_disp.c,修改的目的就是把默认的显示变为32位位启用透明。
lv_disp_t * lv_disp_drv_register(lv_disp_drv_t * driver)
=> add lv_obj_set_style(disp->act_scr, &lv_style_transp);
此时假设你的视频输出在/dev/fb1上,而UI的话在/dev/fb0上就能够看到叠加效果了。楼主的意思应该是在同一个/dev/fb0 上分为图形层和视频层,希望图形层也就是gui的东西不要挡住视频层的东西
您的意思是#define LV_COLOR_SCREEN_TRANSP 1
然后在src/lv_hal/lv_hal_disp.c 143行下面添加 lv_obj_set_style(disp->act_scr, &lv_style_transp); 么
是的,不过确实要有GPU支持才可以,一般的ARM处理器的GPU目前都有几个图层,是可以支持的。
像Android系统就是这么做的。
楼主的意思应该是在同一个/dev/fb0 上分为图形层和视频层,希望图形层也就是gui的东西不要挡住视频层的东西
=> 在同一个framebuffer,目前ARM或MCU软件做不出这个效果的,帧率不会超过10
=> 这样效果想实现也容易,就是灵活利用lvgl的三个图层
disp->act_scr = lv_obj_create(NULL, NULL); /*Create a default screen on the display*/
disp->top_layer = lv_obj_create(NULL, NULL); /*Create top layer on the display*/
disp->sys_layer = lv_obj_create(NULL, NULL); /*Create sys layer on the display*/
把视频YUV格式转换为RGB的显示模式,画在act_scr,然后把UI画在top_layer,这个效率很低。
最近编辑记录 dean (2019-10-08 16:57:47)
离线
楼上朋友说得有道理,靠软件去合成界面效率太低了,除非画面很小帧率才会上去.
离线
一般的LCD屏好像显示不出来透明的效果
离线