STM32/STM8技术william hill官网
直播中

硬汉Eric2013

10年用户 1035经验值
擅长:嵌入式技术
私信 关注
[经验]

【安富莱】【STemWin教程】第24章 STemWin支持的颜色

`第24章 STemWin支持的颜色
    本期教程主要是跟大家讲解一下STemWin支持的颜色,了解这些支持的颜色主要目的是为了根据实际的液晶屏支持颜色进行配置。简单的说就是,如果大家使用的屏只支持黑白两色,那么就得使用GUICC_1。
    24. 1  预定义颜色
    24. 2 固定调色板及其说明
    24. 3 模拟器上演示颜色条测试例程
    24. 4 总结
24.1 预定义颜色
    emWin支持黑色/白色、灰度 (具有不同强度的单色)和彩色显示器。同一用户程序可用于任何显示器;只有LCD显示器的配置才需要进行更改。颜色管理功能会尝试查找与要显示的任何颜色最接近的匹配颜色。
    逻辑颜色是应用程序处理的颜色。逻辑颜色始终按RGB值进行定义,是一个24位的值,每种颜色包含8位,如下所示:0xBBGGRR。因此,白色为0xFFFFFF,黑色为0x000000,鲜红色为0xFF。
    物理颜色是可用显示器实际显示的颜色。按与逻辑颜色相同的24位RGB格式进行定义。在运行时,逻辑颜色映射到物理颜色。对于有几种颜色的显示器(如单色显示器或8/16色LCD),emWin使用优化版的“最小二乘偏差搜索”对其进行转换。它将要显示的颜色 (逻辑颜色)与LCD可实际显示的所有可用颜色 (物理颜色)进行比较,并使用LCD认为最接近的颜色。
    STemWin支持的预定义颜色如下,其它没有定义的需要自己获取相应的颜色数值:
24.1.png
这些颜色在GUI.h文件里面进行了定义:
  1. /*********************************************************************
  2. *
  3. *       Standard colors
  4. */
  5. #define GUI_BLUE          0x00FF0000
  6. #define GUI_GREEN         0x0000FF00
  7. #define GUI_RED           0x000000FF
  8. #define GUI_CYAN          0x00FFFF00
  9. #define GUI_MAGENTA       0x00FF00FF
  10. #define GUI_YELLOW        0x0000FFFF
  11. #define GUI_LIGHTBLUE     0x00FF8080
  12. #define GUI_LIGHTGREEN    0x0080FF80
  13. #define GUI_LIGHTRED      0x008080FF
  14. #define GUI_LIGHTCYAN     0x00FFFF80
  15. #define GUI_LIGHTMAGENTA  0x00FF80FF
  16. #define GUI_LIGHTYELLOW   0x0080FFFF
  17. #define GUI_DARKBLUE      0x00800000
  18. #define GUI_DARKGREEN     0x00008000
  19. #define GUI_DARKRED       0x00000080
  20. #define GUI_DARKCYAN      0x00808000
  21. #define GUI_DARKMAGENTA   0x00800080
  22. #define GUI_DARKYELLOW    0x00008080
  23. #define GUI_WHITE         0x00FFFFFF
  24. #define GUI_LIGHTGRAY     0x00D3D3D3
  25. #define GUI_GRAY          0x00808080
  26. #define GUI_DARKGRAY      0x00404040
  27. #define GUI_BLACK         0x00000000
  28. #define GUI_BROWN         0x002A2AA5
  29. #define GUI_ORANGE        0x0000A5FF
  30. #define GUI_TRANSPARENT   0xFF000000

  31. #define GUI_INVALID_COLOR 0xFFFFFFF      /* Invalid color - more than 24 bits */


`

回帖(3)

硬汉Eric2013

2015-4-10 11:57:17
24.2 固定调色板及其说明
    STemWin支持的调色板模式很多,这里我们就只介绍下面三种,其它的看官方手册。
标示符
可用的颜色数
掩码
GUICC_1
2(黑白)
0x01
GUICC_M565
65536
RRRRRGGGGGBBBBBB
GUICC_M8888
16777216 + 8位Alpha混合
AAAAAAAARRRRRRRRGGGGGGGGBBBBBBBB

24.2.1 GUICC_1
    这种调色板适合用于OLED和12864等单色的显示屏。GUICC_1仅支持2中颜色,显示效果如下:
右下角是两种颜色的调色板

24.2.2 GUICC_M565
    教程配套的RA8875屏都是用的这种调色板,支持65536中颜色。这里565的意思是红色和绿色分量为5位,蓝色分量为6位,即BBBBBGGGGGGRRRRR。显示效果如下:


24.2.3 GUICC_M8888
    前面第三章介绍F429的STemWin的底层驱动时,就是用的这种调色板。其中低位3字节用于颜色分量,高位字节用于Alpha混合。红、绿、蓝和Alpha混合分量都是8位。颜色掩码:AAAAAAAARRRRRRRRGGGGGGGGBBBBBBBB

举报

硬汉Eric2013

2015-4-10 11:58:37
24.3 模拟器上演示颜色条测试例程
    官方的模拟器上有一个专门的例子进行了颜色条的演示,此程序的位置:

此DEMO的实际代码如下:
  1. #include "GUI.h"
  2. #include "LCDConf.h"

  3. /*******************************************************************
  4. *
  5. *       Defines
  6. *
  7. ********************************************************************
  8. */
  9. #define X_START 60
  10. #define Y_START 40

  11. /*******************************************************************
  12. *
  13. *       Types
  14. *
  15. ********************************************************************
  16. */
  17. typedef struct {  (1)
  18.   int NumBars;

  19.   GUI_COLOR Color;
  20.   const char * s;
  21. } BAR_DATA;

  22. /*******************************************************************
  23. *
  24. *       Static data
  25. *
  26. ********************************************************************
  27. */
  28. static const BAR_DATA _aBarData[] = {(2)
  29.   { 2, GUI_RED    , "Red" },
  30.   { 2, GUI_GREEN  , "Green" },
  31.   { 2, GUI_BLUE   , "Blue" },
  32.   { 1, GUI_WHITE  , "Grey" },
  33.   { 2, GUI_YELLOW , "Yellow" },
  34.   { 2, GUI_CYAN   , "Cyan" },
  35.   { 2, GUI_MAGENTA, "Magenta" },
  36. };

  37. static const GUI_COLOR _aColorStart[] = { GUI_BLACK, GUI_WHITE };(3)

  38. /*******************************************************************
  39. *
  40. *       Static code
  41. *
  42. ********************************************************************
  43. */
  44. /*******************************************************************
  45. *
  46. *       _DemoShowColorBar
  47. */
  48. static void _DemoShowColorBar(void) {
  49.   GUI_RECT Rect;
  50.   int      yStep;
  51.   int      i;
  52.   int      j;
  53.   int      xSize;
  54.   int      ySize;
  55.   int      NumBars;
  56.   int      NumColors;

  57.   //
  58.   // Get display size
  59.   //
  60.   xSize = LCD_GetXSize();
  61.   ySize = LCD_GetYSize();
  62.   //
  63.   // Get number of bars
  64.   //
  65.   NumColors = GUI_COUNTOF(_aBarData);
  66.   for (i = NumBars = 0, NumBars = 0; i < NumColors; i++) {
  67.     NumBars += _aBarData[i].NumBars;
  68.   }
  69.   yStep = (ySize - Y_START) / NumBars;
  70.   //
  71.   // Draw text
  72.   //
  73.   Rect.x0 = 0;
  74.   Rect.x1 = X_START - 1;
  75.   Rect.y0 = Y_START;
  76. GUI_SetFont(&GUI_Font8x16);
  77.   for (i = 0; i < NumColors; i++) {
  78.     Rect.y1 = Rect.y0 + yStep * _aBarData[i].NumBars - 1;
  79.     GUI_DispStringInRect(_aBarData[i].s, &Rect, GUI_TA_LEFT | GUI_TA_VCENTER);
  80.     Rect.y0 = Rect.y1 + 1;
  81.   }
  82.   //
  83.   // Draw colors
  84.   //
  85.   Rect.x0 = X_START;
  86.   Rect.x1 = xSize - 1;
  87.   Rect.y0 = Y_START;
  88.   for (i = 0; i < NumColors; i++) {
  89.     for (j = 0; j < _aBarData[i].NumBars; j++) {
  90.       Rect.y1 = Rect.y0 + yStep - 1;
  91.       GUI_DrawGradientH(Rect.x0, Rect.y0, Rect.x1, Rect.y1, _aColorStart[j], _aBarData[i].Color);
  92.       Rect.y0 = Rect.y1 + 1;
  93.     }
  94.   }
  95. }

  96. /*********************************************************************
  97. *
  98. *       Public code
  99. *
  100. **********************************************************************
  101. */
  102. /*********************************************************************
  103. *
  104. *       MainTask
  105. */
  106. void MainTask(void) {
  107.   GUI_Init();
  108.   GUI_SetBkColor(GUI_BLACK);
  109.   GUI_Clear();
  110.   GUI_SetColor(GUI_WHITE);
  111.   GUI_SetFont(&GUI_Font24_ASCII);
  112.   GUI_DispStringHCenterAt("COLOR_ShowColorBar - Sample", 160, 5);
  113.   _DemoShowColorBar();
  114.   while(1)
  115.     GUI_Delay(100);
  116. }
1. 这个例子比较的简单,大家要学习的就是上面1,2,3这种数据的定义方式。在主程序中调用的时候就非常方便了。
实际显示效果如下:


举报

硬汉Eric2013

2015-4-10 11:59:00
24.4总结
颜色方面的知识就跟大家说这么多,后面需要的时候再跟大家详细的讲解。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分