LVGL基础控件:画布(Canvas)上周调试一个智能家居面板项目,客户要求在屏幕上绘制一个动态变化的温湿度曲线图。我第一反应是用Chart控件,但需求里还夹杂着自定义的刻度标签、背景网格线、甚至一个手绘的云朵图标——Chart显然不够灵活。翻了一圈LVGL的控件列表,目光落在Canvas上。说实话,之前一直觉得Canvas就是个“画板玩具”,性能堪忧,但这次硬着头皮试了试,结果发现这东西在嵌入式场景下比想象中能打,前提是别踩我踩过的那些坑。Canvas到底是什么Canvas本质上是一块内存缓冲区,你往里面写像素数据,LVGL把它当普通控件显示。它不像Label那样有文本渲染逻辑,也不像Button那样自带点击状态机——它就是一张白纸,你想画什么,得自己用绘图API往上堆。LVGL的Canvas底层依赖lv_draw_…系列函数,这些函数最终操作的是你分配给Canvas的缓冲区。缓冲区大小决定了Canvas的分辨率和色深。比如一个200x100像素、色深16位的Canvas,缓冲区大小就是2001002 = 40000字节。这个数字在STM32F4这种MCU上不算小,但如果你用RGB565格式,还能接受。创建Canvas的正确姿势先看代码,别急着复制,后面有坑。lv_obj_t*/
071、LVGL基础控件:画布(Canvas)
LVGL基础控件:画布(Canvas)上周调试一个智能家居面板项目,客户要求在屏幕上绘制一个动态变化的温湿度曲线图。我第一反应是用Chart控件,但需求里还夹杂着自定义的刻度标签、背景网格线、甚至一个手绘的云朵图标——Chart显然不够灵活。翻了一圈LVGL的控件列表,目光落在Canvas上。说实话,之前一直觉得Canvas就是个“画板玩具”,性能堪忧,但这次硬着头皮试了试,结果发现这东西在嵌入式场景下比想象中能打,前提是别踩我踩过的那些坑。Canvas到底是什么Canvas本质上是一块内存缓冲区,你往里面写像素数据,LVGL把它当普通控件显示。它不像Label那样有文本渲染逻辑,也不像Button那样自带点击状态机——它就是一张白纸,你想画什么,得自己用绘图API往上堆。LVGL的Canvas底层依赖lv_draw_…系列函数,这些函数最终操作的是你分配给Canvas的缓冲区。缓冲区大小决定了Canvas的分辨率和色深。比如一个200x100像素、色深16位的Canvas,缓冲区大小就是2001002 = 40000字节。这个数字在STM32F4这种MCU上不算小,但如果你用RGB565格式,还能接受。创建Canvas的正确姿势先看代码,别急着复制,后面有坑。lv_obj_t*/