3、图像资源压缩策略:使用L8、A4、A2等索引色格式替代RGB565,减少图片在Flash中的体积。

好,咱们直接进入正题。上一章聊了内存池和动态位图,这一章我带你看看更基础、也更立竿见影的一招——图像资源压缩。

说白了,就是让图片在Flash里占的地方更小。你想想看,一个RGB565的图片,每个像素要16位,也就是2个字节。如果换成索引色格式,比如L8,每个像素只要1个字节,直接砍半。要是用A4或者A2,那就更夸张了。

我在项目里见过不少团队,上来就把所有图片扔成RGB565,Flash爆了也不知道从哪下手。其实很多时候,人眼根本分辨不出那点颜色损失。嗯,这里的关键是——选对格式。

3.1 为什么RGB565不是万能的?

RGB565能显示65536种颜色,看起来很美好。但代价是每个像素占2字节。如果你的界面里有很多纯色图标、简单渐变或者文字,用RGB565纯粹是浪费。

举个例子:一个32x32像素的图标,RGB565要2KB。换成L8,只要1KB。如果这个图标只有黑白两色,用A2(每像素2位)更是只要256字节。差距有多大?你自己算算。

核心观点: 图片的视觉复杂度决定了它能被压缩到什么程度。颜色越少、细节越简单,压缩空间越大。

3.2 索引色格式速览

TouchGFX支持几种索引色格式,我列个表给你看,一目了然。

格式 位深 每像素位数 调色板大小 适用场景
RGB565 16位 16 无 照片、复杂渐变
L8 8位 8 256色 图标、简单界面、文字
A4 4位 4 16色 极简图标、单色图
A2 2位 2 4色 黑白图标、文字

看到没?从L8到A2,压缩比越来越高。但代价是颜色数量越来越少。你得根据图片内容来选。

3.3 实战:如何把图片转成L8?

我个人习惯用ImageMagick或者GIMP来做预处理。TouchGFX Designer虽然也能设置格式,但有时候它自动转换的效果不一定最好。

这里给个ImageMagick的命令行例子:

# 把一张PNG转成256色的L8格式PNG
magick input.png -colors 256 -depth 8 output_l8.png

# 转成16色的A4格式
magick input.png -colors 16 -depth 4 output_a4.png

# 转成4色的A2格式
magick input.png -colors 4 -depth 2 output_a2.png

转换完之后,再导入TouchGFX Designer,选择对应的格式就行。

小技巧: 转换前先看看图片的实际颜色数。用 magick input.png -unique-colors txt:- | wc -l 可以统计颜色数。如果少于256,那L8基本无损。

3.4 避坑指南:我曾经踩过的雷

我曾经在一个项目里,把所有按钮图标都转成了A4格式。结果在屏幕上显示出来,边缘有严重的锯齿和色块。为什么?因为图标本身有抗锯齿渐变,16种颜色根本不够用。

后来我学乖了:带渐变或半透明的图片,至少用L8。纯色扁平风格的图标,才适合A4或A2。

还有一个坑:调色板对齐。TouchGFX的L8调色板是全局的,如果你在同一个屏幕上用了两张不同调色板的L8图片,切换时可能会有颜色闪烁。解决办法是把它们合并到同一张调色板里。

警告: 不要盲目追求高压缩比。A2格式只适合颜色极少的场景。如果图片颜色数超过4种,强行转A2会严重失真,反而影响用户体验。

3.5 知识体系:如何选择压缩策略?

我画了一张图,帮你理清思路。

图像压缩策略选择流程图 图像压缩策略选择流程 原始图片 颜色数 <= 256? 是 颜色数 <= 16? 否 RGB565 是 颜色数 <= 4? 是 A2 (4色) 否 A4 (16色) 否 L8 (256色) 提示 颜色数越少 压缩比越高 但失真也越大

这张图的核心逻辑很简单:先看颜色数,再选格式。颜色数越少,压缩比越高。但别忘了,用户体验也是成本。我建议你从L8开始试,如果视觉上没问题,再往A4、A2走。

3.6 实际效果对比

拿一个32x32的图标来算笔账:

格式 单图大小 100张图总大小 节省空间
RGB565 2 KB 200 KB 基准
L8 1 KB 100 KB 节省50%
A4 0.5 KB 50 KB 节省75%
A2 0.25 KB 25 KB 节省87.5%

你看,光是换格式,就能省下大几十KB甚至上百KB的Flash空间。对于资源紧张的嵌入式设备来说,这可不是小数目。

我的建议: 先从界面里占比最大的图片开始试。比如背景图、大图标、按钮。换成L8后,如果肉眼看不出来区别,那就大胆用。如果发现色块或噪点,再退回到RGB565。

好了,这一章的内容就这些。记住一句话:不是所有图片都需要65536种颜色。选对格式,Flash空间自然就省出来了。