在进行LCD编程时,我们会常见的遇到RGB565,RGB888,L8等格式,RGB565,RGB888这种格式比较常用,今天我们重点介绍下L8这种格式。
与ARGB8888相比,L8格式的图像占用更少的闪存空间,绘制速度更快。
L8格式的图像由调色板和像素阵列组成:调色板最多列出256种不同的颜色,这些颜色以16位格式RGB565、24位格式RGB 888或32位格式ARGB8888指定。像素数组由每个像素的一个字节组成。这个字节是调色板(颜色列表)的索引,指出像素的颜色。TouchGFX框架通过逐个读取像素、查找调色板中的颜色并将其写入帧缓冲区来绘制L8图像。这将自动发生,并由STM32 Chrom-ART硬件加速器加速(如果硬件上可用)。
每像素8位意味着一个L8图像可以使用256种不同的颜色。另一个L8图像可以使用256种其他颜色,因为这两个图像都有各自的调色板。
像素是每个字节(8位)。因此,像素的大小是宽度x高度字节。调色板颜色可以是16位、24位或32位颜色。因此,每个颜色定义将占用2、3或4个字节。
实体图像应存储在L8_RGB888中。如果图像是透明的,则必须使用32位格式(ARGB8888):
格式 | 帧缓冲区格式 | 支持透明像素 | DMA2D支持 |
---|
L8_RGB565型 | 16位RGB565 | 不 | 不 |
L8_RGB888 | 24位RGB888 | 不 | 是的 |
L8_ARGB8888 | 两者 | 是的 | 是的 |
DMA2D不支持带有RGB565调色板的L8格式。这意味着以这种格式绘制图像并不是硬件加速的。因此,除非您在没有DMA2D的平台上(例如STM32G0或STM32F410),否则不应使用此格式。
如果使用串行闪存(非内存映射)存储图像和16位帧缓冲区(格式RGB565),则应使用L8_RGB565格式,因为颜色格式与帧缓冲区格式匹配,并且复制到帧缓冲区的速度更快。
下表显示了首选的L8格式:
帧缓冲区格式 | 平台具有DMA2D | 不带DMA2D的平台 |
---|
RGB565型 | L8_RGB888 | L8_RGB565型 |
RGB888型 | L8_RGB888 | L8_RGB888 |
ARGB8888型 | L8_RGB888 | L8_RGB888 |
透明图像应始终位于L8_ARGB8888中。
L8图像
这是一个典型的标志图像。此图像仅使用16种不同的颜色:
此图像的闪烁大小明显低于标准24位格式(RGB888)的原始图像。下表列出了三种不同调色板格式和非L8格式中此具体图像的flash用法
格式 | 像素大小(字节) | 调色板大小(字节) | 总大小(字节) | 减少(%) |
---|
RGB888型 | 120,000 | zero | 120,000 | - |
L8_RGB565型 | 40,000 | thirty-two | 40,032 | sixty-six point six |
L8_RGB888 | 40,000 | forty-eight | 40,048 | sixty-six point six |
L8_ARGB8888 | 40,000 | sixty-four | 40,064 | sixty-six point six |
我们看到,大小减少非常大,调色板的大小在中等大小的图像上是微不足道的。
在TouchGFX Designer中使用L8图像
在TouchGFX中使用L8图像格式非常容易。唯一要做的就是配置Image Converter,将图像从PNG转换为L8格式。下面我们将介绍整个过程:
在TouchGFX Designer中启动新项目。将图像复制到新项目中的assets/images文件夹:
现在转到TouchGFX Designer并单击“图像”选项卡并选择图像:
在窗口的右侧,选择图像格式L8_RGB888(本例运行的是24位颜色)。
现在可以在画布上插入图像小部件(此处我们在背景中插入了一个方框):
UI代码中无需更改任何内容。图像转换器转换PNG文件并生成L8格式的图像,因为我们在“图像”选项卡中进行了配置。
透明图像
如上所述,对于具有透明度的图像,也可以使用L8格式。
上图使用了108种颜色(多种深浅的蓝色)。此图像可以使用格式L8_ARGB8888。尺寸将大大降低: