【LVGL】LVGL图标显示问题全排查:从问号到正常显示的实战记录

LVGL图标显示问题全排查:从问号到正常显示的实战记录

在嵌入式GUI开发中,LVGL(Light and Versatile Graphics Library)是非常流行的轻量级图形库,但新手在使用自定义图标时,很容易遇到“图标不显示”“显示问号”等问题。最近我帮一位开发者排查了LVGL图标显示异常的问题,从最初的“图标完全不显示”到“显示问号”,再到最终通过间接引用+显式类型转换解决,整个过程踩了不少嵌入式开发的“底层细节坑”。本文将完整复盘排查步骤和方法论,希望能帮到更多LVGL开发者。

一、背景:问题初现与基础环境

1. 开发场景

  • LVGL版本:V8.2(注意:不同版本的颜色格式常量、结构体细节有差异)
  • 需求:在40×40的圆形按钮上显示32×32的自定义设置图标
  • 初始问题
    1. 按钮背景(灰色)能正常显示,但图标完全不显示;
    2. 后来调整图像描述符后,图标变成“问号”(LVGL无法解析图像的典型表现);
    3. 直接引用lv_img_dsc_t变量(&setting)能正常显示,但通过自定义AppIcon结构体间接引用(icon_setting.img_dsc)时失败。

2. 核心代码初始版本

// 自定义图标结构体(用于统一管理图标描述符和尺寸)
typedef struct {
   
   
    const lv_img_dsc_t *img_dsc;  // 图像描述符指针
    uint16_t width;               // 图标宽度
    uint16_t height;              // 图标高度
} AppIcon;

// 图像描述符定义(32×32,4位索引色)
const lv_img_dsc_t setting = {
   
   
    .header.cf = LV_IMG_CF_INDEXED_4BIT,
    .header.always_zero = 0,
    .header.reserved = 0,
    .header.w = 32,
    .header.h = 32,
    .data_size = 576,  // 调色板(16×4) + 像素数据(32×32/2) = 64+512=576
    .data = setting_map,  // 像素数据数组
};

// 间接引用:初始化AppIcon实例
const AppIcon icon_setting = {
   
   
    .img_dsc = &setting,
    .width = 32,
    .height = 32
};

// 创建设置按钮(初始版本:间接引用失败)
lv_obj_t *ui_create_settings_button(lv_obj_t *parent) {
   
   
    lv_obj_t *settings_btn = lv_btn_create(parent);
    lv_obj_set_size(settings_btn, 40, 40);
    lv_obj_set_style_bg_color(settings_btn, lv_color_hex(0xCCCCCC), 0); // 背景正常显示
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值