【Luat-air105】2.2 lvgl显示图片bin格式

1 前言

尝试air105+st7735通过lvgl显示图片,目前只实现了bin格式图片的显示,后续再看看png格式。

2 硬件连接

3 图片格式转换

lvgl官网有提供图片格式转换。
https://lvgl.io/tools/imageconverter

选择本地的图片,然后color format使用lcd配置,比如我的st7735是16真彩(即色RGB彩组成为5:6:5),所以选择16colors
【Luat-air105】2.2 lvgl显示图片bin格式_第1张图片
输出格式可以是bin也可以是c,我选择bin,方便存入lua文件系统加载。

4 lua的图片格式支持

源码中显示支持bin格式图片
【Luat-air105】2.2 lvgl显示图片bin格式_第2张图片

5 图片载入

【Luat-air105】2.2 lvgl显示图片bin格式_第3张图片
通过luatools下载的图片是存在luadb格式下的。

如下图,可以查看到到存储的文件大小。
在这里插入图片描述

6 代码

--- 模块功能:lcd- air105+st7735
-- @module lvgl_img_bin
-- @author youkai
-- @release 2022.02.20

-- LuaTools需要PROJECT和VERSION这两个信息
PROJECT = "esp32_mpu6050"
VERSION = "1.0.0"

log.info("main", PROJECT, VERSION)

-- sys库是标配
_G.sys = require("sys")

-- 1. display: st7735+air105  hspi
function init_air105_st7735 ()
    spi_lcd = spi.deviceSetup(5,pin.PC14,0,0,8,96*1000*1000,spi.MSB,1,1)
    -- SPI 5 (HSPI)  片选PC14
    log.info("lcd.init",
    lcd.init("st7735",{port = "device",pin_dc = pin.PE9 ,pin_rst = pin.PC12,pin_pwr = pin.PE8,direction = 0,w = 128,h = 160,xoffset = 0,yoffset = 0},spi_lcd))-- SPI 5 HSPI
    log.info("LCD OK")
end

function init_lvgl()
    if lvgl.init(128,160) == true then
        log.debug("lvgl init ok.")
    else
        log.debug("lvgl init error.")
    end
end

function lvgl_img_test(file_path)
    local scr = lvgl.obj_create()
    local img = lvgl.img_create(scr,nil)			--
    local style_img = lvgl.style_create()
	lvgl.style_set_image_recolor(style_img, lvgl.STATE_DEFAULT, lvgl.color_make(0xff, 0xff, 0xff))
	lvgl.style_set_image_recolor_opa(style_img, lvgl.STATE_DEFAULT, 0)
	lvgl.style_set_image_opa(style_img, lvgl.STATE_DEFAULT, 255)
	lvgl.obj_add_style(img, lvgl.IMG_PART_MAIN, style_img)
	lvgl.obj_set_pos(img, 0, 0)
	lvgl.obj_set_size(img, 128, 160)
	lvgl.obj_set_click(img, true)
	lvgl.img_set_src(img,file_path)
	lvgl.img_set_pivot(img, 0,0)
	lvgl.img_set_angle(img, 0)
    log.info("scr_load",lvgl.scr_load(scr))
end

log.info("end require")

--添加硬狗防止程序卡死
-- wdt.init(15000)--初始化watchdog设置为15s
-- sys.timerLoopStart(wdt.feed, 10000)--10s喂一次狗

-- 初始化屏幕
init_air105_st7735 ()
init_lvgl()

-- ================main start================
sys.taskInit(function()
    -- ps:有wait不能放在外面
    
    img_path = "/luadb/bbb.bin"
    log.info("fsize:"..img_path, fs.fsize(img_path))

    lvgl_img_test(img_path)

    sys.wait(1500)

    while 1 do
        sys.wait(10)
    end
end)
-- ================main end==================

sys.run()

7 结果

【Luat-air105】2.2 lvgl显示图片bin格式_第4张图片

你可能感兴趣的:(Luat,lua)