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

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

[复制链接]
baiyongbin2009 发布时间:2015-2-1 11:56
特别说明:完整STemWin的1-60期教程和配套实例下载地址:链接4 j! f) H, `% S
第24章 STemWin支持的颜色
& h& f: H8 ^8 M! a; v% i
    本期教程主要是跟大家讲解一下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. /*********************************************************************% N5 H, U( b$ A6 f$ I
  2. *
    , o# G: J2 i0 Q/ f* e
  3. *       Standard colors2 Q" v6 Y: V/ ~$ [6 y4 [; |9 T
  4. */
    1 g/ V3 I: F3 \  B6 y. r
  5. #define GUI_BLUE          0x00FF0000
    8 C8 `& {5 O5 p* N0 Z* u! K
  6. #define GUI_GREEN         0x0000FF00# j. ~" P- |' R8 `5 {- l
  7. #define GUI_RED           0x000000FF4 B6 e: c0 Z! ]# ?
  8. #define GUI_CYAN          0x00FFFF00
    9 x! U, n5 J% v3 C# ]3 R% Y
  9. #define GUI_MAGENTA       0x00FF00FF
    8 M. {4 `. }* {
  10. #define GUI_YELLOW        0x0000FFFF/ K+ W; ~5 V0 b7 [3 m8 K
  11. #define GUI_LIGHTBLUE     0x00FF8080
    9 h% K# S0 }, a" c* x; J
  12. #define GUI_LIGHTGREEN    0x0080FF806 n; ^& n) V: i& u; ^* A2 }
  13. #define GUI_LIGHTRED      0x008080FF
    $ p7 c- k: ?7 e9 F3 z% A
  14. #define GUI_LIGHTCYAN     0x00FFFF80
    . d; q5 f4 M/ U4 W! O) k" Q- u
  15. #define GUI_LIGHTMAGENTA  0x00FF80FF( ?+ ?: f/ v2 M5 l& C* K* C
  16. #define GUI_LIGHTYELLOW   0x0080FFFF
    * O) Z5 r% i/ {8 e
  17. #define GUI_DARKBLUE      0x00800000
    " _/ M9 v, }' p/ t
  18. #define GUI_DARKGREEN     0x000080000 N: a7 a, f9 s+ c" B& T
  19. #define GUI_DARKRED       0x00000080
      \, X3 j  h$ g7 A0 }
  20. #define GUI_DARKCYAN      0x008080003 d- x) h3 ~" _, g- ^) |- I7 v% v
  21. #define GUI_DARKMAGENTA   0x00800080
    9 U- U% N  ~) H
  22. #define GUI_DARKYELLOW    0x00008080( Z& N6 D0 X6 B5 |1 s( W
  23. #define GUI_WHITE         0x00FFFFFF
    " c8 j/ n7 X3 L" M
  24. #define GUI_LIGHTGRAY     0x00D3D3D3
    1 r; R# g6 K2 W  i2 C/ s' O: h# P; D
  25. #define GUI_GRAY          0x00808080
    & Q3 T& x; p9 ^/ K; T) o; B
  26. #define GUI_DARKGRAY      0x00404040: {7 W  i" o, |- |/ X+ g1 l, @. s
  27. #define GUI_BLACK         0x000000008 l& ?4 l2 _9 x: u
  28. #define GUI_BROWN         0x002A2AA5* p: ~6 p& F( N+ K
  29. #define GUI_ORANGE        0x0000A5FF
    ( H( ~* z  a% P+ ^5 J6 a
  30. #define GUI_TRANSPARENT   0xFF000000
    ' G7 D( _/ M* s- H' e
  31. 2 l  G$ j7 x! n( u7 s& e' R8 E
  32. #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
5 H8 L5 Y1 \) u# z5 Q
24.2.3 GUICC_M8888
    前面第三章介绍F429的STemWin的底层驱动时,就是用的这种调色板。其中低位3字节用于颜色分量,高位字节用于Alpha混合。红、绿、蓝和Alpha混合分量都是8位。颜色掩码:AAAAAAAARRRRRRRRGGGGGGGGBBBBBBBB
24.3 模拟器上演示颜色条测试例程
    官方的模拟器上有一个专门的例子进行了颜色条的演示,此程序的位置:
24.4.png
此DEMO的实际代码如下:
  1. #include "GUI.h"  E1 n/ f$ b! J: U/ n4 {
  2. #include "LCDConf.h"
    $ ?( W; I+ f# l1 H+ ?
  3. 2 r/ i4 p5 k5 E0 D1 ^
  4. /*******************************************************************
    7 Y0 H! s# x. p3 O/ |0 m
  5. *
    / M$ z3 B$ ]/ b: K
  6. *       Defines
      t: R8 J/ @* k- @* e( C3 y
  7. *. S; B* {1 R- e# `9 v- a; Y( D
  8. ********************************************************************
    * y$ @2 r! [& E4 f+ Q2 a; _- x' {
  9. */
    # ]; N, N! O7 F) o% U+ e% S6 b$ r$ g
  10. #define X_START 60
    ( {: M2 K2 f# p
  11. #define Y_START 40
    0 d: l$ S5 B$ g% C+ O2 ]

  12. 4 z% t) ?* x" Y4 _1 I" U
  13. /*******************************************************************
    " Y: e! G' Q0 m3 `- l* U2 ]' L7 ]
  14. *
    2 w) w  c, O: n7 k& ?
  15. *       Types! H' D6 G9 J( N2 H' r, r- ?8 f
  16. *
    4 [3 z2 ?' ~" H8 [7 b4 s
  17. ********************************************************************
    ) V& K  D' v- Z$ ^1 N+ l9 N
  18. */, W9 d2 n- K# e8 H* d4 R- \: D
  19. typedef struct {  (1)( `# k, L# V1 B# }8 ]+ X  ^1 ~
  20.   int NumBars;
    9 G) v7 a) D+ d
  21. 2 ?3 a) i2 z7 q/ C) X
  22.   GUI_COLOR Color;+ k0 k( p6 h! |+ Y
  23.   const char * s;: \0 p5 Y$ B0 a8 q
  24. } BAR_DATA;
    8 a, X. ^) k4 T) E0 t

  25. 2 t' c3 e8 @, Z2 L( A
  26. /*******************************************************************
    4 R6 l4 b" q% h7 _3 S! I
  27. *% B5 y. Z1 o' I; W( h1 f7 e9 c) e- M
  28. *       Static data" u4 s# _# v) t5 c- _  T! z6 ?
  29. *
    , s% f7 u$ r, w. H( ]: E3 z& x
  30. ********************************************************************
    9 W" Q$ F* b6 A! N! C; f- v
  31. */+ a- G& x/ {) h. H7 h- C9 {
  32. static const BAR_DATA _aBarData[] = {(2)
    ) ^, ~; O: c  m8 I2 \7 g: P
  33.   { 2, GUI_RED    , "Red" }," Z. O( g* r- {3 }. H
  34.   { 2, GUI_GREEN  , "Green" },
    ( C4 Y6 |, D- ]3 w+ V
  35.   { 2, GUI_BLUE   , "Blue" },
    ! f7 l' W- r) ^6 r: ]3 m
  36.   { 1, GUI_WHITE  , "Grey" },
    1 |- ^8 _' P4 K; R
  37.   { 2, GUI_YELLOW , "Yellow" },- @5 G. x; o5 v
  38.   { 2, GUI_CYAN   , "Cyan" },
    0 p, l4 L7 A) c1 d8 \$ j
  39.   { 2, GUI_MAGENTA, "Magenta" },- o( ?& a# Q' W: Y' \$ W- D
  40. };2 w9 ?# D! k. U7 T' E% G

  41. , q* i! @! H2 f% E( b1 y. c5 R- ^% y
  42. static const GUI_COLOR _aColorStart[] = { GUI_BLACK, GUI_WHITE };(3)+ {. b/ S( i. ]( {: Y
  43. 0 C& P& V% E; a4 T# t
  44. /*******************************************************************
    * v5 v: Z6 M; o& R
  45. *
    5 b0 t  d; Y+ ^$ Q
  46. *       Static code
    ! o) B8 F9 l- y* p2 I1 s
  47. *
    ! R- m/ [" @' u' _5 |
  48. ********************************************************************. ?5 o9 ^! o% q4 i
  49. */& n4 _  ?, T/ a$ M- E& B
  50. /*******************************************************************
    - f# E5 T, ?2 l, f& H; k2 G
  51. *( r  [- h: e# Q" r
  52. *       _DemoShowColorBar
    " x6 o( ^4 J6 Q$ ^( Z$ X+ g
  53. */1 S. G5 S4 h" k  c/ J% c) ?
  54. static void _DemoShowColorBar(void) {4 \; S4 P, H9 ?" s+ {4 G
  55.   GUI_RECT Rect;
    / C3 r, P4 z7 p& _
  56.   int      yStep;5 \: E1 ~# ?) P5 O+ ?
  57.   int      i;2 O9 q5 q; L% w  g
  58.   int      j;( _# W$ w, m4 z/ h& E
  59.   int      xSize;
    6 m( F: V7 g( ]
  60.   int      ySize;
    - t0 d0 O) z) w. ?6 H6 g
  61.   int      NumBars;
    * v1 m1 y' E. I6 l  }
  62.   int      NumColors;
    , {( M9 q" |: Z/ l- k6 E
  63. ) [9 v* E3 A9 X
  64.   //% U5 m* R1 U# W) a* z3 M( Z' t
  65.   // Get display size/ P9 D) a( W3 F7 }- R, z/ B& ~
  66.   //% X% \) Y. W5 o
  67.   xSize = LCD_GetXSize();- ?* [9 C3 E6 }+ Y: X+ b/ t2 v
  68.   ySize = LCD_GetYSize();
    / F, r: V- {. o* i* b
  69.   //
    8 d) }6 f+ u. Q! {
  70.   // Get number of bars) u* \+ n: J: k9 e
  71.   //
    " @6 {9 w2 A% l2 j( _! W
  72.   NumColors = GUI_COUNTOF(_aBarData);9 s0 p0 A0 J  J2 p# A$ w. m
  73.   for (i = NumBars = 0, NumBars = 0; i < NumColors; i++) {) J5 O+ I* E. E, U5 x6 X
  74.     NumBars += _aBarData[i].NumBars;
    " X' \; M. y# R1 X
  75.   }/ y3 f2 w1 }. L$ `  X
  76.   yStep = (ySize - Y_START) / NumBars;. s) S0 y7 b; a+ @
  77.   //+ s) s- C! N# p. C; C8 t
  78.   // Draw text' Z: ]) Y! j6 \
  79.   //
    ) \8 Q1 W/ L6 n3 r7 Z( D
  80.   Rect.x0 = 0;3 G/ Y! E5 B, L9 Z* K# U
  81.   Rect.x1 = X_START - 1;) a* B, d7 }2 X4 w, x& w8 v
  82.   Rect.y0 = Y_START;
    0 d- ]! u  t5 \7 p
  83. GUI_SetFont(&GUI_Font8x16);
      j: b7 m7 |% N6 |
  84.   for (i = 0; i < NumColors; i++) {2 ~" b$ N5 I) ?: f; O7 o1 G
  85.     Rect.y1 = Rect.y0 + yStep * _aBarData[i].NumBars - 1;+ j4 a" z! v* l* U; S( N: m, H1 |" a
  86.     GUI_DispStringInRect(_aBarData[i].s, &Rect, GUI_TA_LEFT | GUI_TA_VCENTER);
      q4 A9 y, b. f0 x5 v8 p9 t
  87.     Rect.y0 = Rect.y1 + 1;
    ( @5 x1 W1 V3 g* a) ]1 N9 `% [7 x0 Q
  88.   }
    5 D1 D# x7 [8 ~4 B5 F3 \
  89.   //
    8 N7 O; s  x# {6 {/ L' ~
  90.   // Draw colors
    6 s, c5 h# z6 u2 q8 ]
  91.   //
    7 X/ Y0 d# Y2 c9 z9 x
  92.   Rect.x0 = X_START;, Q' i1 V. F- w5 F6 ^
  93.   Rect.x1 = xSize - 1;- t3 G8 ^5 _0 I! e) ]
  94.   Rect.y0 = Y_START;
    " S+ ?9 K% z) Q5 g  E# b
  95.   for (i = 0; i < NumColors; i++) {
    - p# L# I6 {% H" e; m8 }$ o& _7 X; @
  96.     for (j = 0; j < _aBarData[i].NumBars; j++) {: u  p% Y" d7 M' k& c. s/ G
  97.       Rect.y1 = Rect.y0 + yStep - 1;& M+ {2 y" y# I8 b7 S: v( h- Q
  98.       GUI_DrawGradientH(Rect.x0, Rect.y0, Rect.x1, Rect.y1, _aColorStart[j], _aBarData[i].Color);1 X8 h( i7 F1 T+ \5 k
  99.       Rect.y0 = Rect.y1 + 1;
    * i# o9 z, Y+ F
  100.     }
    . Z$ s: [+ M. L$ k7 b: R
  101.   }9 `# J8 Q( _; R
  102. }
    * U0 U9 T/ P; L- G1 d" i! e% ^5 q9 i3 B
  103. - v. [& w2 H  k
  104. /*********************************************************************% S8 I, Y6 R! d! _; Y4 S
  105. *; N: B! p# D& g; o2 n' H; J2 i
  106. *       Public code  o+ J8 S' i5 o( u
  107. *( {" b% w% B# j4 E9 T- D7 d
  108. **********************************************************************
    ! c- G# c( S# V( X! f; |! i% L
  109. */! W4 y$ ~( P, K; f
  110. /*********************************************************************
    8 H# i- X" H9 G+ C) y
  111. *, ]# I8 M" E, j; a* D3 `) y
  112. *       MainTask8 ]3 w- O; O$ F  [/ R6 a
  113. */6 ~5 Y; m- `: B% P
  114. void MainTask(void) {- T1 l$ F0 x. C6 z9 L
  115.   GUI_Init();8 l# a8 i* |. _* U' F
  116.   GUI_SetBkColor(GUI_BLACK);$ J9 ~' K! g; I" f
  117.   GUI_Clear();2 m8 S& r8 \: q6 ]
  118.   GUI_SetColor(GUI_WHITE);/ z( p* V# f$ ?: e( m( r) w9 z- `/ |
  119.   GUI_SetFont(&GUI_Font24_ASCII);
    - y1 Q! j9 T' h/ e
  120.   GUI_DispStringHCenterAt("COLOR_ShowColorBar - Sample", 160, 5);
    8 |# d/ |. T. X% j$ v7 H! q& d# M) g
  121.   _DemoShowColorBar();
    0 H2 u& A8 M# U' m: S1 X
  122.   while(1)
    7 |8 I' c2 R( k1 P# v
  123.     GUI_Delay(100);1 h; e& U* ~' b: {" W& w
  124. }
复制代码
1. 这个例子比较的简单,大家要学习的就是上面1,2,3这种数据的定义方式。在主程序中调用的时候就非常方便了。
实际显示效果如下:
24.5.png
24.4 总结
    颜色方面的知识就跟大家说这么多,后面需要的时候再跟大家详细的讲解。

6 T* g+ J6 X) i
赞 收藏 评论2 发布时间:2015-2-1 11:56

举报

2个回答
boyubeiyu 回答时间:2015-2-1 12:47:09
好贴,赞一个
cxtarm 回答时间:2015-2-1 13:37:00
好贴,赞个3 l% T5 q5 {3 T1 ~
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版