BMP Decoder
This BMP Decoder utility allows you to use images from .BMP files in LVGL.
Library source: https://github.com/caj-johnson/bmp-decoder
Instead of loading the whole image at once, BMP pixels are read on demand, so using BMP images requires very little RAM.
If enabled in lv_conf.h
by setting LV_USE_BMP
to 1
, LVGL will
register a new image decoder automatically so BMP files can be directly used as image
sources. Example:
lv_image_set_src(my_img, "S:path/to/picture.bmp");
Note that, a File System (lv_fs_drv) driver needs to registered to open images from files. Follow the instructions in File System (lv_fs_drv).
Limitations
Only BMP files are supported. BMP images as C arrays (
lv_image_dsc_t
) are not. This is 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 .BMP files. If you want to store them in flash it's better to convert them to a C array with LVGL's image converter.
The BMP file's color format needs to match the configured
LV_COLOR_DEPTH
of the display on which it will be rendered. You can use GIMP to save the image in the required format. Both RGB888 and ARGB888 works withLV_COLOR_DEPTH
32
Color palettes are not supported.
Because the whole image is not loaded, it cannot be zoomed or rotated.
Example
Open a BMP image from file
C code
View on 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_image_create(lv_screen_active());
/* Assuming a File system is attached to letter 'A'
* E.g. set LV_USE_FS_STDIO 'A' in lv_conf.h */
lv_image_set_src(img, "A:lvgl/examples/libs/bmp/example_32bit.bmp");
lv_obj_center(img);
}
#endif