news 2026/7/22 10:57:51

ESP32-S3 屏幕显示图片格式对显示速度的影响 png rgb565

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
ESP32-S3 屏幕显示图片格式对显示速度的影响 png rgb565

ESP32-S3 屏幕显示图片格式对显示速度的影响 png rgb565

针对 Cardputer(ESP32-S3 + SPI RGB565 屏)固件中的图标绘制。
相对耗时为经验量级,非精确 benchmark;同尺寸对比以RGB565 已在 RAM、pushImage


1. 结论先看

同尺寸下,常见路径大致是:

RGB565 直推 ≫ ARGB8888 Alpha 混合 ≫ 每次现场解 PNG

优先级做法适用
要最快预生成RGB565(透明烤进黑底)→pushImage底色固定为黑的 UI 图标
要透明叠任意底预生成ARGB8888pushAlphaImage需要半透明/抗锯齿叠在多变底色上
要省 Flash、改图方便保留PNG,首次解码后RAM 缓存数量少、可接受首次卡顿
不推荐反复每次drawPngFile列表翻页、按键闪烁等高频重绘

面板最终都是RGB565;ARGB8888 / PNG 都会在上屏前变成 16-bit。


2. 各路径实际在做什么

2.1 PNG(drawPngFile

LittleFS 读文件 → zlib 解压 → PNG filter 还原 → 颜色/透明处理 → 写屏
  • 慢主要慢在CPU 解码(zlib + filter),不是 30×30 像素本身。
  • 有 Alpha 时由 M5GFX/LovyanGFX 做混合,画质通常最好、也最省 Flash。
  • 每次重绘都走全流程就会明显卡(空调模式切换、米家列表等)。

2.2 预生成 RGB565(.rgb565

LittleFS 读原始像素 → pushImage(直接写屏)
  • 无 zlib、无 Alpha 混合;Flash / SPI 约为 ARGB 的一半。
  • 不支持透明通道:透明区需提前合成到固定底色(本项目 UI 多为黑底)。
  • 手写转换若处理 Alpha/抗锯齿不当,观感会明显差于库解码 PNG;应用「与屏上一致」的像素(例如库解码后再落盘)画质才可靠。

2.3 预生成 ARGB8888(.argb8888

LittleFS 读原始像素 → pushAlphaImage(读底色 + 混合 + 写回)
  • 跳过 zlib,保留完整 Alpha。
  • 字节序需与lgfx::argb8888_t一致:B, G, R, A(见scripts/png_to_rgba8888.py)。
  • 比 RGB565 慢,主要因为逐像素 Alpha,其次是 4 字节/像素的读写量。

2.4 PNG 解码一次 + RAM 缓存

首次:drawPngFile → readRect 存 RGB565 之后:pushImage
  • 画质对齐库解码;重绘接近 RGB565 直推。
  • 占 RAM:宽 × 高 × 2 × 槽位数(空调 8 张 30×30 ≈ 14 KB)。

3. 相对耗时(同分辨率)

路径相对耗时说明
RGB565 已在 RAM →pushImage最快
RGB565 从 Flash →pushImage约 1.5–3×多 FS 读
ARGB8888 已在 RAM →pushAlphaImage约 3–6×Alpha 混合
ARGB8888 从 Flash →pushAlphaImage约 4–8×FS + Alpha
PNG 每次drawPngFile约 10–40×zlib + 解码,波动大

绝对量级(体感参考)

30×30:

路径大约
RGB565pushImage(RAM)< 1 ms
ARGB8888pushAlphaImage(RAM)约 2–5 ms
PNG 现场解码约 10–30+ ms

70×70:大约再乘5–6 倍(按面积)。

若整页还有清屏、大量文字、布局计算,图标优化后「体感不明显」是正常的——瓶颈可能不在图标。


4. Flash / RAM 占用(同图)

公式(无压缩原始像素):

  • RGB565:宽 × 高 × 2
  • ARGB8888:宽 × 高 × 4
  • PNG:视压缩而定,通常远小于原始像素
尺寸RGB565ARGB8888
25×25≈ 1.25 KB≈ 2.5 KB
30×30≈ 1.8 KB≈ 3.6 KB
60×60≈ 7.2 KB≈ 14.4 KB
70×70≈ 9.8 KB≈ 19.6 KB

本仓库 LittleFS 分区约1.5 MBdefault_8MB.csv的 spiffs)。设备图标全套 ARGB 约数百 KB 量级,空间一般够用;若同时保留 PNG + ARGB,体积会叠加上去。

RAM 策略:

  • 少量固定图标(如空调 8 张):可常驻缓存。
  • 大量设备图标:用暂存缓冲按需从 Flash 读(不全量常驻),避免上百 KB~数 MB RAM。

5. 本项目现状(实现要点)

资源格式优先绘制入口
空调模式/icon/ir/.argb8888,回退 PNGsrc/app_ir.cpp(可带槽位缓存)
设备图标/icon/device/.argb8888,回退 PNGsrc/app_device_icons.cpp(scratch 按需加载)
Logo/logo_60.argb8888,回退 PNGdrawAppLogo60
Icons 应用中的设备图同上(走drawDevicePngNativesrc/app_icon_demo.cpp
箭头 / WiFi / 电池等矢量代码绘制src/app_icons.cpp(无图片文件)

转换脚本:

python scripts/png_to_rgba8888.py data/icon/ir python scripts/png_to_rgba8888.py data/icon/device data/logo_60.png data/logo_50.png

另有历史脚本scripts/png_to_rgb565.py(透明合成到黑底);若改回 RGB565 路线,需保证转换质量后再替换绘制路径。

网页配置预览仍使用PNG(浏览器友好);固件绘制优先原始像素文件。


6. 选型建议

  1. 黑底 UI、要极致刷新:RGB565 预生成 +pushImage(必要时 RAM 缓存当前页)。
  2. 要透明/抗锯齿、底色可能不纯黑:ARGB8888 +pushAlphaImage
  3. 图很少、想少维护资源:PNG + 首次解码缓存即可。
  4. 列表里很多张大图:优先减小尺寸(如_25w)+ 原始像素;再考虑页级缓存,而不是全库常驻。

7. 相关 API(M5GFX / LovyanGFX)

API用途
drawPngFile(FS, path, ...)从文件系统解码 PNG
pushImage(x, y, w, h, rgb565*)推送 RGB565,无 Alpha
pushAlphaImage(x, y, w, h, argb8888*)推送带 Alpha 的 32bpp 并混合
readRect(...)读回屏上像素,便于「解码一次再缓存」
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/22 10:56:10

DAY 11 机器学习建模与评估

浙大疏锦行 一、知识点 1.1 数据预处理 1.1.1 导入所需要的包 (边写代码边添加包) import pandas as pd #用于数据处理和分析&#xff0c;可处理表格数据 import numpy as np #用于数值计算&#xff0c;提供高效数组操作 import matplotlib.pyplot as plt #用于绘制各类图表…

作者头像 李华
网站建设 2026/7/22 10:54:49

CUDA进阶学习与深入

什么需要错误处理&#xff1f; CUDA API 调用可能失败&#xff0c;常见原因&#xff1a; 内存不足 设备不存在 内核启动失败 驱动程序错误 不检查错误会导致&#xff1a; 程序崩溃 结果错误 难以调试 CUDA 错误类型 typedef enum cudaError { cudaSuccess 0, …

作者头像 李华
网站建设 2026/7/22 10:54:35

知识的边界:从Anthropic与阿里风波看大模型安全攻防战

知识的边界&#xff1a;从Anthropic与阿里风波看大模型安全攻防战 在人工智能飞速迭代的今天&#xff0c;我们往往沉迷于模型参数的规模、推理速度的快慢以及多模态能力的炫酷&#xff0c;却容易忽视一个隐藏在冰山之下的核心议题——模型知识产权的保护与数据边界的界定。近期…

作者头像 李华
网站建设 2026/7/22 10:54:06

Qt资源系统实战:从图片集成到自定义图标按钮开发

1. 项目概述与核心价值在嵌入式系统或桌面应用的图形用户界面&#xff08;GUI&#xff09;开发中&#xff0c;一个直观、美观的界面往往离不开图片、图标等视觉元素的支撑。然而&#xff0c;对于刚接触Qt框架的开发者来说&#xff0c;如何将这些外部资源高效、可靠地集成到应用…

作者头像 李华