OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3837|回复: 0

EMWin下用GUI_AA_FillPolygon()函数填充圆形

[复制链接]

8

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
110
金钱
110
注册时间
2016-9-23
在线时间
37 小时
发表于 2016-11-26 16:22:25 | 显示全部楼层 |阅读模式
本帖最后由 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


untitled.png
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-23 04:03

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表