初级会员
- 积分
- 110
- 金钱
- 110
- 注册时间
- 2016-9-23
- 在线时间
- 37 小时
|
本帖最后由 liuzq71 于 2016-11-26 16:22 编辑
在Windows GDI/GDI+/D2D下都有填充由路径围起来的区域的函数,这样就可以填充由曲线包围起来的图形比如这样的:,而到目前为止,EMWin尚未提供类似功能的函数。想到曲线其实都是由多边形组成的,所以就想到把圆逼近成多边形,用GUI_AA_FillPolygon()函数填充它,效果还可以。有了这个启发,以后就可以为 EMWin添加个填充路径区域围起来的函数。用GUI_AA_FillPolygon()函数填充圆的效果如下。
源程序:
#include "GUI.h"
#include <math.h>
/*********************************************************************
*
* Defines
*
**********************************************************************
*/
//
// Recommended memory to run the sample with adequate performance
//
#define RECOMMENDED_MEMORY (1024L * 1024 * 2) //2M
/*********************************************************************
*
* Public code
*
**********************************************************************
*/
/*******************************************************************
*
* MainTask
*/
/*在Vs2015下使用时将LCDConf.c中的 XSIZE_PHYS和 YSIZE_PHYS设置成:
#define XSIZE_PHYS 320 * 2
#define YSIZE_PHYS 240 * 2 */
void MainTask(void) {
GUI_POINT l[4000];
int i;
int ix; //横坐标的整数点
int iy; //纵坐标的整数点
double dR = 200; //半径
int iStart = 250;//圆心
double dx, dy;
double dPi = 3.1415926535; //π,2π是一个圆周
double dPercision = 0.01; //精度0.01弧度 数值小,越像多边形
double da = 0; //角度
GUI_Init();
//
// Check if recommended memory for the sample is available
//
if (GUI_ALLOC_GetNumFreeBytes() < RECOMMENDED_MEMORY) {
GUI_ErrorOut("Not enough memory available.");
return;
}
GUI_SetColor(GUI_BLUE);
GUI_SetPenSize(1);
dx = cos(da)*dR; //取得XY坐标,cos和sin呼唤,可以改变旋转方向,目前是顺时针
dy = sin(da)*dR;
ix = (int)dx;//取整
iy = (int)dy;
GUI_MoveTo(iStart + ix, iStart + iy);
for (da = 0, i = 0; da <= 2 * dPi; da += dPercision, i++) //画圆
{
dx = cos(da)*dR;
dy = sin(da)*dR;
ix = (int)dx;
iy = (int)dy;
l.x = ix;
l.y = iy;
GUI_DrawLineTo(iStart + ix, iStart + iy);//画圆
}
GUI_SetColor(GUI_CYAN);
GUI_AA_FillPolygon(l, i, 250, 250); //填充圆
while (1) {
GUI_Exec();
}
}
//no more
|
-
|