跳转到主要内容

更改应用的像素格式

本文将介绍在创建项目后,如何更改应用的像素格式。 具体地说,本文将举例说明如何通过TouchGFX Generator将24位RGB888应用修改为16位RGB565,还将介绍对TouchGFX项目配置的影响。 更改像素格式的原因可能是:

  1. 修改了显示屏要求
  2. 修改了应用要求
  3. 项目最初创建期间的错误
Further reading
请阅读关于颜色模式的文章。

一般而言,更改了应用的像素格式,还需要进行下列更改。

  1. 板启动搭建:更改LTDC的像素格式。
  2. HAL开发:修改TouchGFX Generator设置,以反映LTDC设置或帧缓冲在存储器中的位置。
  3. TouchGFX Designer: 确保所有图像都使用新转换的位深,以及使用正确格式。

我们可以从designer软件开始,检查显示屏图像的当前配置,稍后再返回这些屏幕进行确认。

图像配置RGB888

显示屏配置24位

板卡调试与启动

如果STM32CubeMX项目中的特定设置可能影响应用需要的像素格式,就像LTDC一样,则开发者需要在此进行适当更改,以使TouchGFX以LTDC期望的格式进行渲染。

Further reading
请阅读关于LTDC的文章了解TouchGFX应用有效像素格式设置的详细信息。

HAL开发

如果应用的位深随帧缓冲的像素格式而变化(例如,将ARGB2222更改为BRGA2222后仍将得到8位应用),则开发者可能需要修改帧缓冲的存储位置。 在以下情况下:

修改像素格式

使用此配置生成代码将生成使用16位TouchGFX LCD类的TouchGFXConfiguration

TouchGFXConfiguration.cpp
 static LCD16bpp display;```

如果项目已在TouchGFX Designer中打开,将提示开发者更新,以反映新生成的配置更改。

```json {7-8}
{
"image_configuration": {
"images": {},
"dither_algorithm": "2",
"alpha_dither": "yes",
"layout_rotation": "0",
"opaque_image_format": "RGB565",
"nonopaque_image_format": "ARGB8888",
"section": "ExtFlashSection",
"extra_section": "ExtFlashSection"
},

下表列出了在给定像素格式下对不透明和透明图像格式的影响:

帧缓冲像素格式不透明格式透明格式
Gray2Gray2Gray2
Gray4Gray4Gray4
ABGR2222ABGR2222ABGR2222
ARGB2222ARGB2222ARGB2222
BGRA2222BGRA2222BGRA2222
RGBA2222RGBA2222RGBA2222
RGB565RGB565ARGB8888
RGB888RGB888ARGB8888

TouchGFX Designer

在基于新的TouchGFX Generator设置(在STM32CubeMX中定义)更新了TouchGFX项目后,开发者会发现TouchGFX Designer的配置已经更改,以便与之匹配。

图像配置RGB565

显示屏配置16位

在从TouchGFX Designer内部生成代码后,图像资源的代码现已反映了更新后的像素格式:

TouchGFX\generated\images\src\my_image.png
LOCATION_PRAGMA("ExtFlashSection")
KEEP extern const unsigned char my_image[] LOCATION_ATTRIBUTE("ExtFlashSection") = // 320x240 RGB565 pixels.

结论

只需使用TouchGFX Generator即可修改应用的当前像素格式。 对于具有LTDC的MCU,运行TouchGFX的层必须与在TouchGFX Generator(就LTDC而言,仅限于RGB565和RGB888)设置中定义的帧缓冲像素格式相匹配,以确保与TouchGFX Core渲染的格式相一致。

在从STM32CubeMX生成代码后,将更新TouchGFX项目,后续在TouchGFX Designer中生成代码后,图像资源和帧缓冲驱动程序都将具有指定的格式。