Alpha混合比较有用,Alpha混合是一种合并前景图像与背景图像来创建半透明效果的方法。 颜色信息 STemWin的32位颜色信息: 0-7位:红色 8-15位:绿色 16-23位:蓝色 24-31位:Alpha信息 Alpha值为0表示不透明,值为255表示完全透明。 工作原理 Alpha混合完全自动执行。用户唯一需要做的就是使用函数GUI_EnableAlpha()启用Alpha混合。其中,32位颜色值的最高8位用作Alpha值设置。下面举一个例子: - #include "GUI.h"
-
- void MainTask(void)
- {
-
- GUI_Init(); /* 初始化emWin */
- GUI_EnableAlpha(1); /* 使能Alpha混合 */
-
- GUI_SetBkColor(GUI_WHITE); /* 设置背景颜色 */
- GUI_Clear(); /* 只有清屏了,上面设置背景颜色才能起到作用 */
-
- GUI_SetColor(GUI_BLACK); /* 设置前景色,即设置文本的显示颜色 */
- GUI_DispStringHCenterAt("Alphablending", 45, 41);
-
- /* 显示带alpha效果的填充矩形 */
- GUI_SetColor((0x40uL << 24) | GUI_RED);
- GUI_FillRect(0, 0, 49, 49);
- GUI_SetColor((0x80uL << 24) | GUI_GREEN);
- GUI_FillRect(20, 20, 69, 69);
- GUI_SetColor((0xC0uL << 24) | GUI_BLUE);
- GUI_FillRect(40, 40, 89, 89);
-
- while(1)
- {
- GUI_Delay(10);
- }
- }
复制代码实际显示效果如下:
11.4.1 函数GUI_SetAlpha()实现Alpha值设置
函数unsigned GUI_SetAlpha(U8 Value)也可以实现Alpha值的设置,将参数Value设置为0表示不透明(禁用Alpha混合),设置为255表示完全透明(不可见)。另外,软件方式实现的Alpha混合会增加CPU负荷,所以建议在绘制操作完成后,将Alpha值设回默认值。下面针对这个函数举一个例子(这里只是部分代码,可以在模拟器上面运行的完整例子是:V6-508_2D图形库之基本绘图(模拟器),在教程配套的例子中有)。 - GUI_CONST_STORAGE GUI_BITMAP bmarmfly = {
- 198, // xSize
- 80, // ySize
- 792, // BytesPerLine
- 32, // BitsPerPixel
- (unsigned char *)_acarmfly, // Pointer to picture data
- NULL, // Pointer to palette
- GUI_DRAW_BMP8888
- };
-
- void MainTask(void)
- {
- int i;
-
- /* 初始化emWin */
- GUI_Init();
-
- /* 绘制蓝色填充的圆圈 */
- GUI_SetColor(GUI_BLUE);
- GUI_FillCircle(100, 50, 49);
-
- /* 绘制渐变的透明效果 */
- GUI_SetColor(GUI_YELLOW);
-
- for (i = 0; i < 100; i++)
- {
- U8 Alpha;
- Alpha = (i * 255 / 100);
- /* 设置透明度 */
- GUI_SetAlpha(Alpha);
- /* 画水平的直线 */
- GUI_DrawHLine(i, 100 - i, 100 + i);
- }
-
- /* 绘制透明效果的位图,透明度设置为128 */
- GUI_SetAlpha(0x80);
- /* 画位图 */
- GUI_DrawBitmap(&bmarmfly, 30, 30);
- /* 设置要显示文本的颜色,字体和显示模式 */
- GUI_SetColor(GUI_MAGENTA);
- GUI_SetFont(&GUI_Font24B_ASCII);
- GUI_SetTextMode(GUI_TM_TRANS);
- GUI_DispStringHCenterAt("Alphablending", 100, 3);
-
- /* 设置回默认的不透明状态 */
- GUI_SetAlpha(0);
-
- while(1)
- {
- GUI_Delay(100);
- }
- }
复制代码实际显示效果如下:
11.4.2 函数GUI_SetUserAlpha()实现Alpha值设置
如下两个Alpha值设置函数是配套使用的: (1)GUI_SetUserAlpha() 设置Alpha值。 (2)GUI_RestoreUserAlpha() 恢复用户Alpha混合之前的状态。 仅看函数说明不容易看懂,下面也举一个例子: - #include "GUI.h"
-
- void MainTask(void)
- {
- GUI_ALPHA_STATE AlphaState;
-
- /* 初始化emWin */
- GUI_Init();
-
- /* 使能alpha混合 */
- GUI_EnableAlpha(1);
-
- GUI_SetBkColor(GUI_WHITE); /* 设置背景颜色 */
- GUI_Clear(); /* 只有清屏了,上面设置背景颜色才能起到作用 */
-
- /* 设置前景色,即文本的颜色是黑色 */
- GUI_SetColor(GUI_BLACK);
- GUI_DispStringHCenterAt("Alphablending", 45, 41);
-
- /* 设置alpha值 */
- GUI_SetUserAlpha(&AlphaState, 0xC0);
-
- /* 绘制三个矩形框 */
- GUI_SetColor(GUI_RED);
- GUI_FillRect(0, 0, 49, 49);
- GUI_SetColor(GUI_GREEN);
- GUI_FillRect(20, 20, 69, 69);
- GUI_SetColor(GUI_BLUE);
- GUI_FillRect(40, 40, 89, 89);
-
- /* 恢复之前的alpha值 */
- GUI_RestoreUserAlpha(&AlphaState);
-
- while(1)
- {
- GUI_Delay(10);
- }
- }
复制代码实际显示效果如下: |