|
楼主 |
发表于 2017-2-9 17:07:11
|
显示全部楼层
31.3抗锯齿API函数实例演示
STemWin支持的抗锯齿函数主要如下:
这里我们选择几个常用的函数进行说明。
31.3.1 函数GUI_AA_DrawArc
void GUI_AA_DrawArc(int x0, int y0, int rx, int ry, int a0, inta1);
在当前窗口中的指定位置(x0,y0)绘制x轴方向半径为rx,y轴方向半径为ry,起始角度为a0,结束角度为a1的抗锯齿弧线。
下面是在模拟器上面实际运行的例子:
- #include "GUI.h"
-
-
- /*********************************************************************
- *
- * MainTask
- */
- void MainTask(void)
- {
- /* 初始emWin */
- GUI_Init();
-
- /* 设置画笔粗细 */
- GUI_SetPenSize(4);
- GUI_SetColor(GUI_RED);
-
- /* 使能高分辨率 */
- GUI_AA_EnableHiRes();
-
- /* 抗锯齿因子选择1 */
- GUI_AA_SetFactor(1);
- GUI_AA_DrawArc(50*1, 120*1, 50*1, 50*1, 0, 180);
-
- /* 抗锯齿因子选择3 */
- GUI_AA_SetFactor(3);
- GUI_AA_DrawArc(160*3, 120*3, 50*3, 50*3, 0, 180);
-
- /* 抗锯齿因子选择6 */
- GUI_AA_SetFactor(6);
- GUI_AA_DrawArc(270*6, 120*6, 50*6, 50*6, 0, 180);
-
-
- while(1)
- {
- GUI_Delay(10);
- }
- }
复制代码 要注意设置了抗锯齿因子且使能了高分辨率坐标后,绘制时得乘以相应的因子,这点切不可忘了。
显示效果如下:
31.3.2 函数GUI_AA_DrawLine
void GUI_AA_DrawLine(int x0, int y0, int x1, int y1);
在当前窗口中绘制以(x0,y0)为起点,(x1,y1)为终点的抗锯齿直线。
下面是在模拟器上面实际运行的例子:
- #include "GUI.h"
-
-
- /*********************************************************************
- *
- * MainTask
- */
- void MainTask(void)
- {
- /* 初始化emWin */
- GUI_Init();
-
- /* 设置画笔粗细 */
- GUI_SetPenSize(40);
- GUI_SetColor(GUI_RED);
-
- /* 使能高分辨率 */
- GUI_AA_EnableHiRes();
-
- /* 抗锯齿因子选择1 */
- GUI_AA_SetFactor(1);
- GUI_AA_DrawLine(50*1, 40*1, 50*1, 120*1);
-
- /* 抗锯齿因子选择3 */
- GUI_AA_SetFactor(3);
- GUI_AA_DrawLine(150*3,40*3,150*3,120*3);
-
- /* 抗锯齿因子选择6 */
- GUI_AA_SetFactor(6);
- GUI_AA_DrawLine(250*6, 40*6, 250*6, 120*6);
-
- while(1)
- {
- GUI_Delay(100);
- }
- }
复制代码 要注意设置了抗锯齿因子且使能了高分辨率坐标后,绘制时得乘以相应的因子,这点切不可忘了。
实际效果如下:
31.3.3 函数GUI_AA_DrawPolyOutline
void GUI_AA_DrawPolyOutline(const GUI_POINT * pPoint, intNumPoints, int Thickness, int x, int y)
在当前窗口指定的位置(x, y)绘制由坐标点数组pPoint中NumPoints个点组成的抗锯齿多边形轮廓,轮廓厚度为Thickness。
下面是在模拟器上面实际运行的例子:
- #include "GUI.h"
-
-
- /* 宏定义,方便求出数组中成员个数 */
- #define countof(Array) (sizeof(Array) / sizeof(Array[0]))
-
- /* 宏定义,抗锯齿因子*/
- #define MAG 3
-
- /* 多边形的坐标点 */
- static GUI_POINT aPoints[] = {
- { 0*MAG, 0*MAG },
- { 15*MAG, 30*MAG},
- { 0*MAG, 20*MAG},
- {-15*MAG, 30*MAG}
- };
-
- /*********************************************************************
- *
- * MainTask
- */
- void MainTask(void)
- {
- /* 初始化emWin */
- GUI_Init();
-
- /* 使能高分辨率坐标 */
- GUI_AA_EnableHiRes();
-
- /* 设置前景色 */
- GUI_SetColor(GUI_RED);
-
- /* 设置抗锯齿因子是3,绘制抗锯齿多边形轮廓 */
- GUI_AA_SetFactor(MAG);
- GUI_AA_DrawPolyOutline(aPoints, countof(aPoints), 3*MAG, 150*MAG, 40*MAG);
-
- while(1)
- {
- GUI_Delay(10);
- }
- }
复制代码 使用这个函数要注意:
1. 通过连接起点和终点,可使绘制的多线条自动闭合,起点不得再次指定为终点。
2. 设置了抗锯齿因子且使能了高分辨率坐标后,绘制时得乘以相应的因子,这点切不可忘了。
3. 该函数处理的定义点不能超过10个。如果多边形由10个以上的点构成,则使用GUI_AA_DrawPolyOutlineEx()函数。
实际效果如下:
31.3.4 函数GUI_AA_DrawRoundedRect
void GUI_AA_DrawRoundedRect(int x0, int y0, int x1, int y1, intr);
在当前窗口指定的左上角位置(x0, y0)和右下角位置(x1, y1)绘制圆角半径为r的抗锯齿圆角矩形。
下面是在模拟器上面实际运行的例子:
- #include "GUI.h"
-
-
- /* 设置抗锯齿因子 */
- #define MAG 3
-
- /*********************************************************************
- *
- * MainTask
- */
- void MainTask(void)
- {
- /* 初始化emWin */
- GUI_Init();
-
- /* 清屏 */
- GUI_SetBkColor(GUI_WHITE);
- GUI_Clear();
-
- /* 使能高分辨率坐标 */
- GUI_AA_EnableHiRes();
-
- /* 设置前景色和画笔粗细 */
- GUI_SetColor(GUI_RED);
- GUI_SetPenSize(5);
-
- /* 设置抗锯齿因子,绘制抗锯齿圆角矩形 */
- GUI_AA_SetFactor(MAG);
- GUI_AA_DrawRoundedRect(10*MAG, 10*MAG, 100*MAG, 100*MAG, 5*MAG);
-
- while(1)
- {
- GUI_Delay(10);
- }
- }
复制代码 要注意设置了抗锯齿因子且使能了高分辨率坐标后,绘制时得乘以相应的因子,这点切不可忘了。
实际显示效果如下:
31.3.5 函数GUI_AA_FillCircle
void GUI_AA_FillCircle(int x0, int y0,int r);
在当前窗口指定位置(x0, y0)半径为r的抗锯齿填充圆形。
下面是在模拟器上面实际运行的例子:
- #include "GUI.h"
-
-
- /* 设置抗锯齿因子 */
- #define MAG 3
-
- /*********************************************************************
- *
- * MainTask
- */
- void MainTask(void)
- {
- /* 初始化emWin */
- GUI_Init();
-
- /* 清屏 */
- GUI_SetBkColor(GUI_WHITE);
- GUI_Clear();
-
- /* 使能高分辨率坐标 */
- GUI_AA_EnableHiRes();
-
- /* 设置前景色 */
- GUI_SetColor(GUI_DARKBLUE);
-
- /* 设置抗锯齿因子是3,绘制抗锯齿填充圆形 */
- GUI_AA_SetFactor(MAG);
- GUI_AA_FillCircle(160*MAG, 120*MAG, 80*MAG);
-
- while(1)
- {
- GUI_Delay(10);
- }
- }
复制代码 要注意设置了抗锯齿因子且使能了高分辨率坐标后,绘制时得乘以相应的因子,这点切不可忘了。
实际显示效果如下:
31.3.6 函数GUI_AA_FillPolygon
void GUI_AA_FillPolygon(const GUI_POINT* pPoint, int NumPoints, int x, int y);
在当前窗口指定的位置(x, y)绘制由坐标点数组pPoint中NumPoints个点组成的抗锯齿填充多边形。
下面是在模拟器上面实际运行的例子:
- #include "GUI.h"
-
-
- /* 宏定义,方便获得数组中成员个数 */
- #define countof(Array) (sizeof(Array) / sizeof(Array[0]))
-
- /* 宏定义,抗锯齿因子*/
- #define MAG 3
-
- /* 多边形坐标点 */
- static GUI_POINT aPoints[] = {
- { 0*MAG, 0*MAG},
- { 70*MAG, -30*MAG},
- { 0*MAG, 50*MAG},
- {-70*MAG, -30*MAG}
- };
-
- /*********************************************************************
- *
- * MainTask
- */
- void MainTask(void)
- {
- /* 初始化emWin */
- GUI_Init();
-
- /* 使能高分辨率坐标 */
- GUI_AA_EnableHiRes();
-
- /* 设置前景色*/
- GUI_SetColor(GUI_RED);
-
- /* 设置抗锯齿因子是3,绘制抗锯齿填充圆形 */
- GUI_AA_SetFactor(MAG);
- GUI_AA_FillPolygon(aPoints, countof(aPoints), 150*MAG, 40*MAG);
-
- while(1)
- {
- GUI_Delay(100);
- }
- }
复制代码 要注意设置了抗锯齿因子且使能了高分辨率坐标后,绘制时得乘以相应的因子,这点切不可忘了。
实际运行效果如下:
31.3.7 函数GUI_AA_FillRoundedRect
void GUI_AA_FillRoundedRect(int x0, int y0, int x1, int y1, intr);
在当前窗口指定的左上角位置(x0, y0)和右下角位置(x1, y1)绘制圆角半径为r的抗锯齿圆角填充矩形。
下面是在模拟器上面实际运行的例子:
- #include "GUI.h"
-
- /* 宏定义,抗锯齿因子*/
- #define MAG 3
-
-
- /*********************************************************************
- *
- * MainTask
- */
- void MainTask(void)
- {
- /* 初始化emWin */
- GUI_Init();
-
- /* 使能高分辨率坐标 */
- GUI_AA_EnableHiRes();
-
- /* 清屏 */
- GUI_SetBkColor(GUI_WHITE);
- GUI_Clear();
-
- /* 设置多边形颜色,多边形抗锯齿因子,然后绘制抗锯齿圆角填充矩形 */
- GUI_SetColor(GUI_DARKBLUE);
- GUI_AA_SetFactor(MAG);
- GUI_AA_FillRoundedRect(10*MAG, 10*MAG, 100*MAG, 100*MAG, 5*MAG);
-
- while(1)
- {
- GUI_Delay(10);
- }
- }
复制代码 要注意设置了抗锯齿因子且使能了高分辨率坐标后,绘制时得乘以相应的因子,这点切不可忘了。
实际显示效果如下: |
|