Github地址,直接到位
最近在研究ESP32+TFT_eSPI+1.8寸TFT屏幕显示。在研究图片显示时,没有找到一个非常简单高效的方法、我也尝试了官方Arduino demo,但是,不是让下载PNG库、就让下载JPGDecode库,要增加以一些函数算法,非常繁琐、臃肿。
本人想用最简单的方法、最高效、最易维护的方式实现显示JPG/PNG/BMP图片。在网络寻找相关各种资料,看到官方github的tft.pushImage、tft.drawXBitmap、tft.drawBitmap方法,经过测试只有pushImage比较简单,而Bitmap实现均出现问题。
参考
若使用pushImage则需要采用Color565格式的数组,此时需要一个转换工具,将图片统一转换为Color565格式。
上面的“TFT_Flash_Bitmap.ino”代码上面有提示“libraries\UTFT\Tools\ImageConverter565.exe”,通过百度搜索到该文件。通过百度网盘搜索下载后,通过测试确实可以在ESP32上正常显示,成功显示。
通过进一步查看,该文件是C#开发,且没有加密。因此计划反编译出源代码,将其转化为HTML5网页格式,这样更加方便快捷。
使用.NET Reflector对主程序进行加载。很快的定位到了“Save”按钮代码。
上面找到相关核心代码后,我先通过VS2022新建了C#项目,将其功能复现。然后直接上GPT翻译成了HTML网页。
网页操作非常简单,直接“选择文件”,然后自动会转换图片为Color565数组格式。将该文件存为头文件“img1.h”,并有arduino主程序ino进行include。
Arduino代码
#include <Arduino.h>
#include <TFT_eSPI.h>#include "img1.h"
TFT_eSPI tft = TFT_eSPI();
//【use TFT_eSprite will be faster.】
// TFT_eSprite spr(&tft);void setup()
{
tft.init();//【use Default】
tft.fillScreen(TFT_WHITE);
tft.setSwapBytes(true);
tft.pushImage(0, 0, img1_width, img1_height, img1); //display//【use TFT_eSprite will be faster.】
// spr.createSprite(100,100);
// spr.fillSprite(TFT_WHITE);
// spr.setSwapBytes(true);
// spr.pushImage(0, 0, img1_width, img1_height, img1);
// spr.pushSprite(0, 0); //display
}void loop()
{}
上图红色为TFT默认方式,就这么简单。。实现显示图片。不需要管什么JPG库一类的,哪些效率低的不行。该方式简单、高效!
显示成功!!