BMP decoder¶
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_...
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.
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()