一个简单的转换图片为十六进制代码的工具(LVGL)

本文介绍了一个使用Python和OpenCV将LVGL中的图片转换为C语言格式的过程,以便在代码中直接使用,提供了一个基本的示例,尽管未进行优化和兼容性考虑。
摘要由CSDN通过智能技术生成

目的

最近在玩单片机,发现lvgl需要在代码里面定义图片,而vgl官方提供的是一个在线的转换工具。
这个功能非常简单,简单的用脚本来实现应该更加方便。

注意:
下面的脚本没有经过优化,兼容性也没有考虑。
只是作为一个经过验证的,能够跑通的实例,提供一个思路,仅此而以。

python脚本

依赖opencv

import cv2
import numpy as np

im = cv2.imread("lvgl/demos/widgets/assets/avatar.png", cv2.IMREAD_UNCHANGED) # 保留alpha通道信息

w,h,d = im.shape

print(f"{w=},{h=},{d=}")

with open("demo.c", "w") as f:
    f.write("#include \"lvgl.h\"\n\nuint8_t my_img_data[] = {\n")
    init = True
    for i in range(w):
        for j in range(h):
            b,g,r,a = im[i,j]
            if init:
                init = False
                f.write(" ")
            else:
                f.write(",")
            f.write(f"{hex(b):>5},{hex(g):>5},{hex(r):>5},{hex(a):>5}")
        f.write("\n")
    f.write("};\n\n")
    s = '''
    lv_img_dsc_t my_img_dsc = {
    .header.always_zero = 0,
    .header.w = %d,
    .header.h = %d,
    .data_size = %d * %d * %d,
    .header.cf = LV_IMG_CF_TRUE_COLOR_ALPHA,          /*Set the color format*/
    .data = my_img_data,
};
            '''
    f.write(s%(w,h,w,h,d))

lvgl中使用该图片

lv_conf.h

#define LV_COLOR_DEPTH 32

test.c

...
LV_IMG_DECLARE(my_img_dsc);
lv_obj_t * icon = lv_img_create(lv_scr_act());

/*From variable*/
lv_img_set_src(icon, &my_img_dsc);
...
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值