lvgl不能显示图片,但可以显示按键?

news2024/11/28 8:24:16

AT32F403A, IAR, ST7735S, LVGL8.3。

一、现象:

本来想着用LVGL做一个摄像头的显示功能 + 切换动态。可是死活实现不了功能。

因为移植好LVGL后,首先测试了显示按键,功能正常,以为是一切正常。在模拟器上调试效果完成后,将代码搬运到IAR工程里。却发现无法正常显示,也就是不显示。

二、分析:

一开始以为模拟器与实际项目有差别,因为以前出现过这种现象:

                lv_canvas_create(lv_scr_act()); //不显示

                lv_canvas_create(NULL);//显示

于是分步测试代码功能。我使用的动态显示摄像头数据的实现是:

                lv_img。直接写lv_img的源.data数组,再lv_obj_invalidate来通知绘图函数重绘。

既然这样不显示,那么我就试试其它的方法。比如调用lv_img_set_src(, );、使用canvas等,都没有用,而且还发现在static void disp_flush(lv_display_t * disp_drv, const lv_area_t * area, uint8_t * px_map)里面,px_map指向的是内存,而这片内存的数据里都是0,也就是背景色。我还专门将图象的左上角设置成多种颜色,放在(0,0)位置处,同样px_map里面存的是0。

于是问题陷入了僵局,问题应该在别处而我又找不到。想到的几个方法是

1、断点跟踪问题:

在移植的绘图函数里找断点,通过callback view向上分析:

到底哪里拷贝了px_data数据,是不是那里出现了什么错误。

但这样一来就需要修改lvgl内核源码,可能会产生更多问题,更是会消耗更多时间。

2、再次移植LVGL源码:

第一次移植的是开发者版本的源码,但是运行直接卡死。没办法重下了8.3的版本,由于两者相差比较大,索性重新移植。前面的问题就是在这第二次移植的基础上出现的。

这次直接移植也只是重下后,进行文件替换。

结果编译发现出错:

LV_IMG_CF_TRUE_COLOR 、与 LV_COLOR_SIZE未定义。

LV_COLOR_SIZE可以改为LV_COLOR_DEPTH,就在lv_conf.h里定义,这个很好找。

但是LV_IMG_CF_TRUE_COLOR我一直在enum _lv_color_format_t里找到,里适合的是LV_COLOR_FORMAT_RGB565。

两者区别如下:

LV_IMG_CF_TRUE_COLOR4
LV_COLOR_FORMAT_RGB5650x12

怪不得出错,第一个移植8.3的程序我是直接将缺少的定义复制到头文件里,不只是名字的区别。看来是被LV_COLOR_SIZE误导了一下。

三:原因:

LV_COLOR_FORMAT_RGB565 != LV_IMG_CF_TRUE_COLOR

猜测可能lvgl官网的图片转换用的还是老版本的,不支持8.3。

四、解决:

解决如下:

const lv_img_dsc_t test = {
  .header.cf = LV_COLOR_FORMAT_RGB565,
  .header.always_zero = 0,
  .header.reserved = 0,
  .header.w = 160,
  .header.h = 128,
  .data_size = 20480 * LV_COLOR_SIZE/ 8,
  .data = test_map,
};

于是图片可以正常显示了:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1055690.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

复习Day07:链表part03:21. 合并两个有序链表、2. 两数相加

之前的blog链接:https://blog.csdn.net/weixin_43303286/article/details/131700482?spm1001.2014.3001.5501 我用的方法是在leetcode再过一遍例题,明显会的就复制粘贴,之前没写出来就重写,然后从拓展题目中找题目来写。辅以Lab…

【Kafka专题】Kafka快速实战以及基本原理详解

目录 前言课程内容一、Kafka介绍1.1 MQ的作用1.2 为什么用Kafka 二、Kafka快速上手2.1 实验环境2.2 单机服务体验2.3 认识Kafka模型架构2.4 Kafka集群2.5 理解服务端的Topic、Partion和Broker2.6 章节总结:Kafka集群的整体结构 三、Kraft集群(拓展&#…

SpringMVC的请求映射:路由请求的精准导航

SpringMVC的请求映射:路由请求的精准导航 SpringMVC是一个用于构建Web应用程序的强大框架,它提供了众多的特性和组件来简化开发过程。其中,请求映射是SpringMVC中的一个关键特性,用于将HTTP请求映射到具体的处理方法。本文将深入…

电池集成充电解决方案提供商【XCharge Group】获得壳牌风险投资

来源:猛兽财经 作者:猛兽财经 猛兽财经获悉,总部位于德国汉堡的电池集成充电解决方案提供商XCharge Group今日宣布已获得了壳牌风险投资公司的投资,这笔交易的金额没有披露。 XCharge Group计划将这笔资金用在三方面:…

Vue中的数据分页与分页组件设计

Vue中的数据分页与分页组件设计 在前端开发中,数据分页是一个常见的需求,特别是当处理大量数据时。Vue作为一款流行的JavaScript框架,提供了强大的工具和生态系统来实现数据分页。本文将介绍如何在Vue中进行数据分页,以及如何设计…

制作原创音乐app软件FL Studio21.2中文版

如果你正在录制、编辑或创作新歌曲,你会需要使用 FL Studio 快捷键。FL Studio 可用于录制、编辑和制作,以及专业人士录制和创作歌曲。在 FL Studio 中创建音乐专辑也是一个漫长的过程,可能会变得复杂且需要较长时间。很好的是,学…

20230224_HDR-ISP_unpack_depwl_01

https://github.com/JokerEyeAdas/HDR-ISP/tree/main 1.unpack:解析raw图 (1)unpack:2个字节1个像素 (2)mipi10:5个字节4个像素 [p1 9:2][p2 9:2][p3 9:2][p4 9:2][(p1 1:0)(p2 1:0)(p3 1:0)(p4 1:0)] (3)mipi12:3个字节2个像…

UE5 虚幻引擎 详解蓝图通信 必备的知识技能之一!!!

目录 0 引言1 直接蓝图通信1.1 在关卡蓝图中直接拖拽Actor1.2 Get Actor of Class/Get All Actors of Class 2 事件分发器2.1 创建事件分发器2.2 绑定事件分发器2.3 调用事件分发器 3 蓝图接口3.1 使用步骤3.2 为什么要使用蓝图接口 4 蓝图转换 0 引言 问题:为什么需…

优雅的写Controller 层代码这样写才可以

前 言 本篇主要要介绍的就是controller层的处理,一个完整的后端请求由4部分组成: 接口地址(也就是URL地址)请求方式(一般就是get、set,当然还有put、delete)请求数据(request,有head跟body)响应数据(response) 本篇将解决以下3个…

DHCP服务器原理

DHCP (Dynamic Host Configuration Protocol,动态主机配置协议) Linux系统DHCP服务配置文件为 /etc/dhcpd.conf DHCP租约过程 DHCP租约过程就是DHCP客户机动态获取IP地址的过程。 DHCP租约过程分为4步: •客户机请求IP(客户机发DHCPDISCOVER广播包);…

Electron 惊现十级漏洞,到底谁的锅?

最近开源软件又爆出一个十级漏洞,该漏洞冲击范围巨大,涉及数百万不同的应用程序,其中也包括 iOS、Android 应用程序以及使用 Electron 构建的跨平台应用程序。 这个漏洞两周前就已经被苹果和谷歌发现,但苹果和谷歌在披露漏洞时缺乏关键信息,造成了“巨大的盲点”,导致全…

ASUS华硕飞行堡垒5笔记本FX504GM_FX80GM原装出厂Windows10系统

系统自带所有驱动、出厂主题壁纸、系统属性华硕专属LOGO标志、Office办公软件、MyASUS华硕电脑管家等预装程序 下载链接:https://pan.baidu.com/s/1C8vPvqiwqoUY3PxC915LXg?pwdv079

1、手把手教你学会使用 FlinkSQL客户端

目录 1、FlinkSQL客户端的功能 2、FlinkSQL客户端启动参数配置 2.1 基本语法 2.2 相关参数([MODE]): 2.3 相关参数(embedded [OPTIONS]): 3、启动Flink的sql-client 3.1 启动时使用初始化脚本 3.2 启动时指定依赖的jar包 3.3 基于yarn-session模…

28391-2012 建筑施工机械与设备 人力移动式液压动力站

声明 本文是学习GB-T 28391-2012 建筑施工机械与设备 人力移动式液压动力站. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本标准规定了人力移动式液压动力站(以下简称动力站)的范围、分类、要求、试验方法和检验规则。 本标准适用于以中小…

在pycharm中弹出图后,需要关闭才会显示Process finished with exit code 0

在pycharm中弹出图后,需要关闭才会显示Process finished with exit code 0 在PyCharm中,当你运行一个Python程序并弹出一个图形窗口时,程序会等到图形窗口关闭后才会显示 “Process finished with exit code 0” 的消息。 这是 由于代码执行…

【Java 进阶篇】JDBC(Java Database Connectivity)详解

JDBC(Java Database Connectivity)是 Java 中用于连接和操作数据库的标准 API。它允许 Java 应用程序与不同类型的数据库进行交互,执行查询、插入、更新和删除等操作。本文将详细介绍 JDBC 的各个类及其用法,以帮助您更好地理解和…

Vue.js3学习篇--Vue模板应用

目录 一,模板基础 1.模板插值 (1)基础插值 (2)HTML代码插值 (3)标签属性插值 2.模板指令 (1)定义 (2)指令参数 二.条件渲染 1.使用v-if指令渲染 2.使…

采集SEO方法-添加链接段落

采集大量的文章数据,要想批量做SEO添加链接段落方法,可以使用简数采集器的处理规则实现。 简数采集器的一个处理规则,可以包含多种SEO方法,还可自由组合,强大灵活方便。 添加补充链接段落的SEO技巧: 1&a…

vue2与vue3 v-model的区别

目录 Vue 2中的v-model 默认使用 自定义使用 修饰符.sync (Vue2) Vue3.x 使用 v-model vue 3 的v-model使用原理 多个 v-model 使用 总结 Vue 2中的v-model 在Vue 2中,v-model是一个用于在子组件和父组件之间双向绑定数据的指令。当在子组件中使用v-mode…

【数据结构】AVL树(C++实现)

​ ​📝个人主页:Sherry的成长之路 🏠学习社区:Sherry的成长之路(个人社区) 📖专栏链接:数据结构 🎯长路漫漫浩浩,万事皆有期待 上一篇博客:【数据…