STM32 LCD 简单显示彩色图片

2023-12-07 11:52

本文主要是介绍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();     //开始写入GRAMfor (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();     //开始写入GRAMfor (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函数的实现,以及传参过程。

这篇关于STM32 LCD 简单显示彩色图片的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/465777

相关文章

基于Python实现一个简单的题库与在线考试系统

《基于Python实现一个简单的题库与在线考试系统》在当今信息化教育时代,在线学习与考试系统已成为教育技术领域的重要组成部分,本文就来介绍一下如何使用Python和PyQt5框架开发一个名为白泽题库系... 目录概述功能特点界面展示系统架构设计类结构图Excel题库填写格式模板题库题目填写格式表核心数据结构

RedisTemplate默认序列化方式显示中文乱码的解决

《RedisTemplate默认序列化方式显示中文乱码的解决》本文主要介绍了SpringDataRedis默认使用JdkSerializationRedisSerializer导致数据乱码,文中通过示... 目录1. 问题原因2. 解决方案3. 配置类示例4. 配置说明5. 使用示例6. 验证存储结果7.

C/C++ chrono简单使用场景示例详解

《C/C++chrono简单使用场景示例详解》:本文主要介绍C/C++chrono简单使用场景示例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友... 目录chrono使用场景举例1 输出格式化字符串chrono使用场景China编程举例1 输出格式化字符串示

idea中project的显示问题及解决

《idea中project的显示问题及解决》:本文主要介绍idea中project的显示问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录idea中project的显示问题清除配置重China编程新生成配置总结idea中project的显示问题新建空的pr

windows和Linux安装Jmeter与简单使用方式

《windows和Linux安装Jmeter与简单使用方式》:本文主要介绍windows和Linux安装Jmeter与简单使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录Windows和linux安装Jmeter与简单使用一、下载安装包二、JDK安装1.windows设

电脑显示mfc100u.dll丢失怎么办?系统报错mfc90u.dll丢失5种修复方案

《电脑显示mfc100u.dll丢失怎么办?系统报错mfc90u.dll丢失5种修复方案》最近有不少兄弟反映,电脑突然弹出“mfc100u.dll已加载,但找不到入口点”的错误提示,导致一些程序无法正... 在计算机使用过程中,我们经常会遇到一些错误提示,其中最常见的就是“找不到指定的模块”或“缺少某个DL

使用Python开发一个简单的本地图片服务器

《使用Python开发一个简单的本地图片服务器》本文介绍了如何结合wxPython构建的图形用户界面GUI和Python内建的Web服务器功能,在本地网络中搭建一个私人的,即开即用的网页相册,文中的示... 目录项目目标核心技术栈代码深度解析完整代码工作流程主要功能与优势潜在改进与思考运行结果总结你是否曾经

Mysql表的简单操作(基本技能)

《Mysql表的简单操作(基本技能)》在数据库中,表的操作主要包括表的创建、查看、修改、删除等,了解如何操作这些表是数据库管理和开发的基本技能,本文给大家介绍Mysql表的简单操作,感兴趣的朋友一起看... 目录3.1 创建表 3.2 查看表结构3.3 修改表3.4 实践案例:修改表在数据库中,表的操作主要

springboot简单集成Security配置的教程

《springboot简单集成Security配置的教程》:本文主要介绍springboot简单集成Security配置的教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录集成Security安全框架引入依赖编写配置类WebSecurityConfig(自定义资源权限规则

如何使用Python实现一个简单的window任务管理器

《如何使用Python实现一个简单的window任务管理器》这篇文章主要为大家详细介绍了如何使用Python实现一个简单的window任务管理器,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起... 任务管理器效果图完整代码import tkinter as tkfrom tkinter i