When using the SDK example example\\multimedia\\lvgl\\lvgl_tools_example\\NXP_GUI_guider, after configuring menuconfig to switch from LVGL8 to LVGL9, all UI resources were regenerated using GUI Guider 1.9 to produce LVGL9-compatible code. However, a compilation error occurs:
------------- ezip convert begin: ezip -convert F:\\OpenSiFli\\code\\nxp_guider\\image\\ezip_brightness1_ARGB8888_140x140.c color RGB888 -------------
Found array: _brightness1_ARGB8888_140x140_map (78400 bytes)
Error: No image descriptors found
---------------------------------------- ezip convert end !!! --------------------------------------
GenImgFile build_a52-nano_n16r16_hcpu\\image\\ezip_brightness2_ARGB8888_140x140.tmp.c
ImgFileBuilder= -rgb888 -cfile 2 -pal_support
ezip version: 2.4.24_2026_01_19_h264_mp4
------------- ezip convert begin: ezip -convert F:\\OpenSiFli\\code\\nxp_guider\\image\\ezip_brightness2_ARGB8888_140x140.c color RGB888 -------------
Found array: _brightness2_ARGB8888_140x140_map (78400 bytes)
Error: No image descriptors found
---------------------------------------- ezip convert end !!! --------------------------------------
The error seems to indicate an issue with image descriptors.
In the original SDK example (LVGL8), image descriptors are defined as:
const lv_img_dsc_t _lcd_off_alpha_392x392 = {
.header.cf = LV_IMG_CF_TRUE_COLOR_ALPHA,
.header.always_zero = 0,
.header.reserved = 0,
.header.w = 392,
.header.h = 392,
.data_size = 153664 * LV_IMG_PX_SIZE_ALPHA_BYTE,
.data = _lcd_off_alpha_392x392_map,
};
But in LVGL9, the descriptor format has changed to:
const lv_image_dsc_t _brightness1_ARGB8888_140x140 = {
.header.magic = LV_IMAGE_HEADER_MAGIC,
.header.cf = LV_COLOR_FORMAT_ARGB8888,
.header.stride = 560,
.header.w = 140,
.header.h = 140,
.data_size = sizeof(_brightness1_ARGB8888_140x140_map),
.data = _brightness1_ARGB8888_140x140_map,
};
Question: What modifications are needed to make the image descriptors compatible with LVGL9?
Answer:
The root cause of the error lies in the image conversion tool (ezip) used by the SDK, which expects image descriptors in the LVGL8 format (e.g., lv_img_dsc_t with .header.cf, .data_size, etc.), but your project now uses LVGL9’s new format (lv_image_dsc_t).
However, the ezip tool (part of NXP’s image processing pipeline) does not recognize the new LVGL9 image descriptor structure — hence the error: No image descriptors found.
Solution:
You need to keep using the old LVGL8-style image descriptor format in your C files (even in an LVGL9 project), so that ezip can detect and process the image arrays correctly.
Even though LVGL9 uses
lv_image_dsc_t, the build-time image conversion tooling (ezip) in this SDK is not yet updated to parse the new format.
Recommended Fix:
Step 1: Regenerate or manually define images using the LVGL8-compatible descriptor format
Use this format for your image declarations (even in LVGL9):
const lv_img_dsc_t _brightness1_ARGB8888_140x140 = {
.header.cf = LV_IMG_CF_TRUE_COLOR_ALPHA, // For ARGB8888
.header.always_zero = 0,
.header.reserved = 0,
.header.w = 140,
.header.h = 140,
.data_size = 78400, // = 140 * 140 * 4 (ARGB8888 = 4 bytes per pixel)
.data = _brightness1_ARGB8888_140x140_map,
};
Note:
.data_sizeshould bewidth * height * 4for ARGB8888.
This format ensures that ezip can find the image descriptor and process the .c file properly.
Step 2: Adapt at runtime (LVGL9 compatibility)
Since LVGL9 no longer uses lv_img_dsc_t, you must convert the old descriptor to the new lv_image_dsc_t format at runtime.
Create a wrapper function or macro to convert:
lv_image_dsc_t img_dsc_b1;
void init_image_desc(const lv_img_dsc_t* old_dsc, lv_image_dsc_t* new_dsc) {
new_dsc->header.magic = LV_IMAGE_HEADER_MAGIC;
new_dsc->header.w = old_dsc->header.w;
new_dsc->header.h = old_dsc->header.h;
new_dsc->header.stride = old_dsc->header.w * 4; // 4 bytes per pixel for ARGB8888
new_dsc->header.cf = LV_COLOR_FORMAT_ARGB8888;
new_dsc->data_size = old_dsc->data_size;
new_dsc->data = old_dsc->data;
}
// Usage:
init_image_desc(&_brightness1_ARGB8888_140x140, &img_dsc_b1);
// Then use &img_dsc_b1 with LVGL9 APIs
lv_image_set_src(img_obj, &img_dsc_b1);
Alternative (if possible):
Check if a newer version of GUI Guider 1.9+ or NXP MCUXpresso SDK supports LVGL9-native image generation with compatible build tools. If available, update your toolchain so that ezip recognizes lv_image_dsc_t.
Summary:
| Step | Action |
|---|---|
Pure lv_image_dsc_t in .c image files (ezip won’t detect it) |
|
lv_img_dsc_t (LVGL8 style) in generated .c files for ezip compatibility |
|
Map lv_img_dsc_t → lv_image_dsc_t before passing to LVGL9 |
|
| Ensure GUI Guider and ezip versions support LVGL9 (if not, stick with workaround) |
This hybrid approach allows you to use LVGL9 at runtime while maintaining compatibility with legacy build tools.