你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

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

[复制链接]
baiyongbin2009 发布时间:2015-2-1 11:56
特别说明:完整STemWin的1-60期教程和配套实例下载地址:链接
第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 */
复制代码
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.png
(右下角是两种颜色的调色板)
24.2.2 GUICC_M565
    教程配套的RA8875屏都是用的这种调色板,支持65536中颜色。这里565的意思是红色和绿色分量为5位,蓝色分量为6位,即BBBBBGGGGGGRRRRR。显示效果如下:
24.3.png

24.2.3 GUICC_M8888
    前面第三章介绍F429的STemWin的底层驱动时,就是用的这种调色板。其中低位3字节用于颜色分量,高位字节用于Alpha混合。红、绿、蓝和Alpha混合分量都是8位。颜色掩码:AAAAAAAARRRRRRRRGGGGGGGGBBBBBBBB
24.3 模拟器上演示颜色条测试例程
    官方的模拟器上有一个专门的例子进行了颜色条的演示,此程序的位置:
24.4.png
此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这种数据的定义方式。在主程序中调用的时候就非常方便了。
实际显示效果如下:
24.5.png
24.4 总结
    颜色方面的知识就跟大家说这么多,后面需要的时候再跟大家详细的讲解。

收藏 评论2 发布时间:2015-2-1 11:56

举报

2个回答
boyubeiyu 回答时间:2015-2-1 12:47:09
好贴,赞一个
cxtarm 回答时间:2015-2-1 13:37:00
好贴,赞个

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版