大家好,
我现在在LVGL上用显示摄像头图像,使用的是图片控件,测试时使用的是160x120分辨率,已经成功显示,没有问题。
但是现在我要显示480x320分辨率的图像,摄像头图像已被转换成RGB565,使用以下的结构
lv_img_dsc_t img1_ = {
.header.cf = LV_IMG_CF_TRUE_COLOR ,
.header.always_zero = 0,
.header.reserved = 0,
.header.w = 480,
.header.h = 320,
.data_size = 153600 * LV_COLOR_SIZE/8,
.data = get_cam_data,
};
要显示这么大的图像,需要在RAM开辟一个480x320x2/1024=300K的大缓存,但是我的MCU没有这么大的RAM,无法一次直接开辟300K缓存,所以我自己想的办法是把300K分成4等分,也就是75K,也就是定义一个get_cam_data[480*320/4]的数组,每次往图片控件送1/4的数据,然后把这4个数据合成一个完整的图像。
如果不用LVGL,完全裸屏驱动,我已经测试成功,是没有问题的,就是用set_windows(x,y,x,y)先设置一个480320的窗口,然后每次刷1/4数据,LCD控制器会自动填充最终得到的就是一个完整的图像。
这个函数的好处是,你每次刷了1/4数据后,他会一直等你的下一次数据,而不会你刷1/4后他就结束了。因为你设置的是480320的窗口,你刷满480*320的窗口后他才会结束。这给分段显示提供了方便。
现在的问题是,在LVGL上,没有这种函数,lv_obj_set_pos();这种设置坐标的函数,是刷多大数据显示多大的范围。不能达到预期效果。
所以想问,在LVGL上怎么进行这种操作?我测试了很多种方法都无法合成一个完整的图像,LVGL里没有类似set_windows(x,y,x,y)函数的API,不知道要怎么操作?
LVGL号称可以用在低资源的MCU上,但是如果每次开缓存都必须要开一个和图片大小一样的,感觉很不现实,不知道有没有其他方法实现。谢谢