BMP decoder(BMP解码器)¶
查看原文
This extension allows the use of BMP images in LVGL. This implementation uses bmp-decoder library. The pixels are read on demand (not the whole image is loaded) so using BMP images requires very little RAM.
If enabled in lv_conf.h
by LV_USE_BMP
LVGL will register a new image decoder automatically so BMP files can be directly used as image sources. For example:
lv_img_set_src(my_img, "S:path/to/picture.bmp");
Note that, a file system driver needs to registered to open images from files. Read more about it here or just enable one in lv_conf.h
with LV_USE_FS_...
这个拓展库让我们可以在 LVGL 中使用 BMP 图像。其中使用的是 bmp-decoder 库。bmp图的像素是按需读取的(不是加载整个图像),因此使用 BMP 图像需要很少的 RAM。
在 lv_conf.h 中打开 LV_USE_BMP 后,LVGL 会在初始化时自动注册一个新的BMP图象解码器,之后就可以直接打开BMP格式的图像文件。例如:
lv_img_set_src(my_img, "S:path/to/picture.bmp");
注意,需要注册文件系统驱动程序才能从文件系统中打开bmp图像,点击这里阅读了解更多信息,或直接在 lv_conf.h
中打开其中一个类似 LV_USE_FS_...
的宏。
Limitations(限制)¶
查看原文
Only BMP files are supported and BMP images as C array (
lv_img_dsc_t
) are not. It's because there is no practical differences between how the BMP files and LVGL's image format stores the image data.BMP files can be loaded only from file. If you want to store them in flash it's better to convert them to C array with LVGL's image converter.
The BMP files color format needs to match with
LV_COLOR_DEPTH
. Use GIMP to save the image in the required format. Both RGB888 and ARGB888 works withLV_COLOR_DEPTH 32
Palette is not supported.
Because not the whole image is read in can not be zoomed or rotated.
仅支持 BMP 文件,不支持像 C 数组 (
lv_img_dsc_t
) 这样的 BMP 图像数据。这是因为 BMP 文件和 LVGL 的图像格式存储图像数据的方式没有实际区别。BMP 文件只能从文件中加载。如果您想将它们存储在 闪存(FLASH) 中,最好使用 LVGL 的图像转换器将它们转换为 C 数组。
BMP 文件的颜色格式需要与
lv_conf.h
中的LV_COLOR_DEPTH
匹配。使用 GIMP 以所需格式保存图像。 RGB888 和 ARGB888 都适用于LV_COLOR_DEPTH 32
不支持调色板。
因为不是整个图像被读入后不能进行缩放或旋转。
Example¶
Open a BMP image from file¶
C code
GitHub#include "../../lv_examples.h"
#if LV_USE_BMP && LV_BUILD_EXAMPLES
/**
* Open a BMP file from a file
*/
void lv_example_bmp_1(void)
{
lv_obj_t * img = lv_img_create(lv_scr_act());
/* Assuming a File system is attached to letter 'A'
* E.g. set LV_USE_FS_STDIO 'A' in lv_conf.h */
#if LV_COLOR_DEPTH == 32
lv_img_set_src(img, "A:lvgl/examples/libs/bmp/example_32bit.bmp");
#elif LV_COLOR_DEPTH == 16
lv_img_set_src(img, "A:lvgl/examples/libs/bmp/example_16bit.bmp");
#endif
lv_obj_center(img);
}
#endif
#!/opt/bin/lv_micropython -i
import lvgl as lv
import display_driver
import fs_driver
fs_drv = lv.fs_drv_t()
fs_driver.fs_register(fs_drv, 'S')
img = lv.img(lv.scr_act())
# The File system is attached to letter 'S'
img.set_src("S:example_32bit.bmp")
img.center()