STM32 LCD 简单显示彩色图片

STM32 LCD 数组方式简单显示彩色图片


文章目录

  • STM32 LCD 数组方式简单显示彩色图片
  • 前言
  • 1、图片处理
    • 1.1 准备图片
    • 1.2 查看和调整图片大小
  • 2、Picture2Hex软件使用
  • 3、函数代码实现
  • 3、图片显示效果
  • 4、显示图片太大会报错
  • 总结


前言

在使用LCD填充的时候发现正点原子提供了一个很好用的填充函数,就是LCD_Color_Fill();该函数是用来填充颜色块的,也可以直接用来显示图片,因为图片也是由颜色块组成的。所以需要使用stm32从内部flash的方法来显示图片时就不要独立写显示图片的函数了,非常实用。


1、图片处理

1.1 准备图片

第一步:准备一张需要显示的图片。
注意:该图片的分辨率大小需要在使用的LCD屏支持的分辨率范围内,如果图片分辨率超出LCD屏幕的分辨率是无法正常显示或者出现异常的情况。

接下来就以下面这个表情图片为例进行显示:

在这里插入图片描述

该图片为.jpg格式的图片,分辨率是200x200。使用的LCD分辨率是240x320的。

1.2 查看和调整图片大小

第二步:查看图片分辨率方法:
方法1:在图片属性里面查看

在这里插入图片描述

方法2:用画图软件方式查看

鼠标右键图片以画图方式打开图片,如下图:
点击重新调整大小。

在这里插入图片描述

在这里插入图片描述

这里有一个小技巧,如果发现这个分辨率太大,也可以在这里输入小分辨率的数值即可进行调整,注意勾选下面的保持纵横比选项,才能保证图片的原始比例。

2、Picture2Hex软件使用

该软件在浏览器输入软件名字搜索下载即可。

第一步:双击Picture2Hex.exe文件,即可打开该软件,界面如下:

在这里插入图片描述

根据图片信息进行设置参数。

在这里插入图片描述

导入图片:

在这里插入图片描述

导入后就可以在软件的目录下看到这个work文件夹,打开后可以看到一个bmp的图片和.c的文件,转换生成的大数组就在这个.c里面了,拷贝到MDK工程即可。

在这里插入图片描述

添加后的效果如下,需要在名字前面添加const关键字进行修饰,不然会提示内存不够的。
这个LOGO_W和LOGO_H是图片对应的分辨率,为了方便看大小的,可以不用管该代码。

在这里插入图片描述

3、函数代码实现

函数原型如下:

//在指定区域内填充指定颜色块
//(sx,sy),(ex,ey):填充矩形对角坐标,区域大小为:(ex-sx+1)*(ey-sy+1)
//color:要填充的颜色
void LCD_Color_Fill(u16 sx, u16 sy, u16 ex, u16 ey, u16 *color)
{
    u16 height, width;
    u16 i, j;
    width = ex - sx + 1;            //得到填充的宽度
    height = ey - sy + 1;           //高度

    for (i = 0; i < height; i++)
    {
        LCD_SetCursor(sx, sy + i);  //设置光标位置
        LCD_WriteRAM_Prepare();     //开始写入GRAM

        for (j = 0; j < width; j++)
        {
            LCD->LCD_RAM=color[i * width + j];  //写入数据
        }
    }
}

这里有一点是需要特别注意的,就是这个函数是对显示区域加1操作了,所以在调用该函数时,区域大小也需要对应减去1才能正常显示,不然显示的图片会显示异常等错位效果。

在main.c文件下的mian函数内调用该函数。

在while里面调用函数:LCD_Color_Fill(0, 0, 199, 199, (u16*)gImage);
编译下载代码后发现能正常显示图片,能达到实验效果目的。

但是发现调用函数这样写区域坐标有点别扭,和图片分辨率大小不太符合。那么,可以适当改一下原函数进行显示,修改如下:

//在指定区域内填充指定颜色块
//(sx,sy),(ex,ey):填充矩形对角坐标,区域大小为:(ex-sx)*(ey-sy)
//color:要填充的颜色
void LCD_Color_Fill(u16 sx, u16 sy, u16 ex, u16 ey, u16 *color)
{
    u16 height, width;
    u16 i, j;
    width = ex - sx;               //得到填充的宽度
    height = ey - sy;              //高度

    for (i = 0; i < height; i++)
    {
        LCD_SetCursor(sx, sy + i);  //设置光标位置
        LCD_WriteRAM_Prepare();     //开始写入GRAM

        for (j = 0; j < width; j++)
        {
            LCD->LCD_RAM=color[i * width + j];  //写入数据
        }
    }
}

把获取宽度和高度的坐标+1删除即可。

调用如下:LCD_Color_Fill(0, 0, 200, 200, (u16*)gImage);
这样写就很方便看出图片的分辨率大小和显示位置了。

编译下载代码后发现效果是一样的,这样看起来就比较直观图片大小了。

3、图片显示效果

在这里插入图片描述

4、显示图片太大会报错

这种读取大数组的方式不建议用来显示大图片的,因为是芯片内存有限,显示小图片还是可以的。要是需要显示图片的还是建议读取SD卡的方式,这样就不会占用太大的内存了,节省一些空间。

添加大图片数组后下载会有错位提示,如下图:

在这里插入图片描述

在这里插入图片描述

总结

用这个方法来显示小分辨率的图片还是很不错的,颜色效果很逼真,和图片原图是一样的效果,就是有点费内存,不过小型项目或者学习还是可以的。

用这个LCD_Color_Fill函数后,发现使用其它的图片转换工具转换出来的数据显示会异常的,大概率和LCD显示格式存在差异导致的,刚好LCD是用565的颜色模式,而这个软件也刚好是的,所以就对应可以使用了。

通过该例子就能很好地学习了一下LCD_Color_Fill函数的实现,以及传参过程。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

016 OpenCV Laplacian边缘检测

目录 一、环境 二、拉普拉斯原理 三、完整代码 一、环境 本文使用环境为&#xff1a; Windows10Python 3.9.17opencv-python 4.8.0.74 二、拉普拉斯原理 拉普拉斯算子是一种常用于图像处理的边缘检测技术&#xff0c;它有助于识别图像中的边缘和纹理特征。原理上&#x…

接雨水-困难

给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 示例 1&#xff1a;输入&#xff1a;height [0,1,0,2,1,0,1,3,2,1,2,1] 输出&#xff1a;6 解释&#xff1a;上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表…

【精选】设计模式——策略设计模式-两种举例说明,具体代码实现

Java策略设计模式 简介 策略设计模式是一种行为型设计模式&#xff0c;它允许在运行时选择算法的行为。 在软件开发中&#xff0c;我们常常需要根据不同情况采取不同的行为。通常的做法是使用大量的条件语句来实现这种灵活性&#xff0c;但这会导致代码变得复杂、难以维护和扩…

017 OpenCV 向量机SVM

目录 一、环境 二、SVM原理 三、完整代码 一、环境 本文使用环境为&#xff1a; Windows10Python 3.9.17opencv-python 4.8.0.74 二、SVM原理 OpenCV中的向量机&#xff08;SVM&#xff09;是一种监督学习算法&#xff0c;用于分类和回归分析。它通过找到一个最优的超平…

VideoAssembler 一种新颖的方法,生成具有多样化内容的视频的方法

文章目录 摘要方法代码 VideoAssembler: Identity-Consistent Video Generation with Reference Entities using Diffusion Model 本文提出了VideoAssembler&#xff0c;一种新颖的方法&#xff0c;生成具有多样化内容的视频。它可以保留实体的保真度&#xff0c;并生成可控的内…

SAP 工序委外简介

在SAP系统中,外部加工分为工序委外和标准委外两种,对于工序委外,它存在于很多的模块中,在PP、PM、PS等模块中都有应用。 工序委外中字面理解就是在生产过程中,加工的某道工序需要外发给供应商进行加工,物权没有发生转变,只是支付给供应商相应是加工费用,实际加工成本最终…

动手学深度学习——Anaconda、pytorch、paddle安装(cpu版本)

之前出了个Windows下的深度学习安装&#xff0c;但在继续学习的过程中发现&#xff0c;沐神的一些代码跑不起来&#xff0c;这里又提供pytorch和paddle的安装&#xff0c;各位用pytorch或者百度飞桨paddlepaddle来学习深度学习也是可以的。 安装Anaconda 1. 打开Anaconda链接&…

每日一题,快来挑战,投个平台题目。

本关任务:将十个数进行从大到小的顺序进行排列。 相关知识&#xff08;略&#xff09; 编程要求 根据提示&#xff0c;在右侧编辑器Begin-End处补充代码。 输入 输入十个整数。 输出 以从大到小的顺序输出这个十个数。 测试说明 样例输入&#xff1a; 1 2 3 4 5 6 7 8 9 …

java设计模式学习之【组合模式】

文章目录 引言组合模式简介定义与用途&#xff1a;实现方式UML 使用场景优势与劣势组合模式在Spring中的应用员工结构示例代码地址 引言 设想您正在组织一个大型派对&#xff0c;需要将各种食品和饮料按类型整理。您可能有单独的物品&#xff0c;如一瓶苏打水&#xff0c;也可…

数字逻辑与数据系统实验报告

一、TTL 集成电路的功能测试 1、实验目的 &#xff08;1&#xff09;熟悉 TTL 各种门电路的逻辑功能&#xff1b; &#xff08;2&#xff09;掌握 TTL 各种门电路的逻辑功能测试方法&#xff1b; &#xff08;3&#xff09;掌握 Multisim 软件使用。 2、步骤设计 &#xff08…

如何在Spring Boot中优雅地重试调用第三方API?

文章目录 1. 引言2. 重试机制的必要性3. Spring Retry简介4. Spring Boot中使用Spring Retry实现重试4.1 添加依赖4.2 配置重试策略4.2.1 代码示例 4.3 降级处理4.3.1 代码示例 5. 异步重试5.1 异步方法的重试5.1.1 代码示例 5.2 异步方法的降级处理5.2.1 代码示例 6. 异常分类…

基于Unity3D 低多边形地形模型纹理贴图

在线工具推荐&#xff1a; 3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 当谈到游戏角色的3D模型风格时&#xff0c;有几种不同的风格&#xf…

java SSM毕业文档管理系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 java SSM 毕业文档管理系统是一套完善的web设计系统&#xff08;系统采用SSM框架进行设计开发&#xff0c;springspringMVCmybatis&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代 码和数据库&#xff0c;系统主要采…

计算UDP报文CRC校验的总结

概述 因公司项目需求&#xff0c;遇到需要发送带UDP/IP头数据包的功能&#xff0c;经过多次尝试顺利完成&#xff0c;博文记录以备忘。 环境信息 操作系统 ARM64平台的中标麒麟Kylin V10 工具 tcpdump、wireshark、vscode 原理 请查看大佬的博文 UDP伪包头定义&#x…

西工大计算机学院计算机系统基础实验一(函数编写15~17)

还是那句话&#xff0c;稳住心态&#xff0c;稳住心态&#xff0c;稳住心态。心里别慌&#xff0c;心里别慌&#xff0c;心里别慌。 第15题&#xff0c;howManyBits&#xff0c;返回用二进制补码形式表示x所需的最小二进制位数。比如howManyBits(12) 5&#xff0c;12可以被表…

轨迹分析:Palantir评估细胞分化潜能 类似于monocle2

轨迹分析是单细胞测序分析中重要的组成部分&#xff0c;它基于细胞谱系之间“具有中间态细胞”的理论基础&#xff0c;通过结合先验知识&#xff08;细胞注释、markers&#xff09;、细胞基因表达改变等&#xff0c;为在单细胞测序数据赋予了“假时间”&#xff08;pseudotime&…

vscode eide arm-gcc 编译环境搭建调试

安装cube&#xff0c;vscode 1.安装vscode插件 C/C Extension Pack Chinese (Simplified) (简体中文) Language Pack Cortex-Debug Embedded IDE 工具链设置 2.软件工程生成 调试 3.生成工程&#xff0c;导入工程 4. 配置工程 编译完毕

【EI会议征稿】第五届大数据与信息化教育国际学术会议(ICBDIE 2024)

【往届检索】第五届大数据与信息化教育国际学术会议&#xff08;ICBDIE 2024&#xff09; 2023 5th International Conference on Big Data and Informatization Education 第五届大数据与信息化教育国际学术会议&#xff08;ICBDIE 2024&#xff09;定于2024年01月19-21日在…

小型洗衣机哪个牌子质量好?内衣洗衣机便宜好用的牌子

近些年来&#xff0c;由于人们对生活和健康的追求越来越高&#xff0c;所以内衣洗衣机也逐渐走进了人们的视线&#xff0c;许多研究显示&#xff0c;单纯地用手洗内衣是并不能彻底消除内衣物上所残留的细菌&#xff0c;而内衣洗衣机拥有着高温蒸煮的除菌功能&#xff0c;因此可…

【C语言】用户空间使用非缓存内存

在用户空间使用非缓存内存通常不是标准做法&#xff0c;因为非缓存内存的操作与硬件平台紧密相关&#xff0c;并且通常被保留给内核模块或设备驱动程序使用。 一、方法 用户空间程序一般不直接处理非缓存内存问题&#xff0c;因为它们依赖于操作系统来管理内存缓存一致性。尽…