emWin支持不同程度的色彩显示,比如彩色显示、多阶灰度显示和黑/白显示等。 用户现有的emWin应用程序只需修改位于GUIDRV_wf.c中的显示配置,就可以在不同类型的显示器上正常使用。
12.1. 逻辑颜色和物理颜色
在emWin中颜色分为逻辑颜色和物理颜色。其中逻辑颜色是应用程序处理的颜色, 包含三个8位的颜色分量和一个8位的alpha通道。在emWin V5.30之前的很长一段时间内, 逻辑颜色都只有ABGR这一种颜色格式,如表格 ABGR逻辑颜色格式 所示。
随着越来越多的硬件平台开始使用和ABGR稍微不同的颜色格式,emWin从V5.30开始增加了对ARGB逻辑颜色格式的支持, 以便在某些情况下能够显着提高性能。ARGB逻辑颜色格式构成如表格 ARGB逻辑颜色格式 所示。
从上表可以看出,ARGB逻辑颜色格式除了将蓝色和红色调换了位置以外,Alpha通道值的定义也完全相反。
由于STM32F429的DMA2D采用的就是ARGB颜色格式,所以我们所有的例程全部使用ARGB格式。 因为emWin的逻辑颜色格式跟DMA2D的格式相同的话可以提升性能和运行效率。如果还是采用原来的ABGR格式,显示的时候每个像素都要进行格式转换, 这样对图形性能有较大影响,特别是显示24位和32位色彩深度的图形时影响会很大。如何开启ARGB颜色格式在emWin移植章节已有介绍,在此不再赘述。
物理颜色是显示器实际显示的颜色,在运行时,逻辑颜色映射到物理颜色。
12.2. 预定义的颜色
emWin预定义了一些标准颜色,这些颜色使用宏定义来表示,如图 emWin预定义颜色 所示。
这里需要注意一点,图 emWin预定义颜色 是官方手册给出的标准颜色宏定义,使用的是ABGR颜色格式。 程序中则给出了ARGB和ABGR两种格式下的标准颜色宏定义,见 代码清单:颜色-1 。
代码清单:颜色-1 标准颜色定义
/*********************************************************************
*
* Standard colors
*/
#if (GUI_USE_ARGB) //ARGB格式的标准颜色定义
#define GUI_BLUE 0xFF0000FF
#define GUI_GREEN 0xFF00FF00
#define GUI_RED 0xFFFF0000
#define GUI_CYAN 0xFF00FFFF
#define GUI_MAGENTA 0xFFFF00FF
#define GUI_YELLOW 0xFFFFFF00
#define GUI_LIGHTBLUE 0xFF8080FF
#define GUI_LIGHTGREEN 0xFF80FF80
#define GUI_LIGHTRED 0xFFFF8080
#define GUI_LIGHTCYAN 0xFF80FFFF
#define GUI_LIGHTMAGENTA 0xFFFF80FF
#define GUI_LIGHTYELLOW 0xFFFFFF80
#define GUI_DARKBLUE 0xFF000080
#define GUI_DARKGREEN 0xFF008000
#define GUI_DARKRED 0xFF800000
#define GUI_DARKCYAN 0xFF008080
#define GUI_DARKMAGENTA 0xFF800080
#define GUI_DARKYELLOW 0xFF808000
#define GUI_WHITE 0xFFFFFFFF
#define GUI_LIGHTGRAY 0xFFD3D3D