一、上期回顾
上一期我们讲了ege库中的基本绘图函数,那么今天,让我们来讲讲高级绘图函数。
上一期传送门:DEV-C++ ege.h库 绘图教程(一)
二、高级绘图函数
1.ege_enable_aa
这个函数是用来启动或关闭抗锯齿的。
void EGEAPI ege_enable_aa(bool enable, PIMAGE pimg = NULL);
就比如说,画一个圆弧,我们都知道是一个一个像素点描出来的。
所以说有一些地方像素画出来的就很突兀,特别是在画细节的时候。
那么开启抗锯齿的话,就可以减少这种突兀感。
虽说我也不知道是怎么做到的。
2.ege_line
画线,但是多了一些细节。格式和line没什么区别。
void EGEAPI ege_line(float x1, float y1, float x2, float y2, PIMAGE pimg = NULL);
首先我们可以看到参数类型都是float的,就体现出他的“高级”了。
但除此以外,还有一些地方需要注意。
首先就是我们都知道这也还是一个个像素点,但画线时他不会画(x1,y1)和(x2,y2)这两个点。
也就是说,ege_line(100,100,101,100)画不出任何东西出来。
另一件值得注意的事情是,画线的颜色是RGBA的,如果A==0,那么什么也画不出来。
就是没什么用罢了,建议使用line函数。
3.ege_drawpoly
和drawpoly没什么两样,就是参数变成了
void EGEAPI ege_drawpoly(int numpoints, ege_point* polypoints, PIMAGE pimg = NULL);
也就是说,创建polypoints数组时,得这样:
#include<bits/stdc++.h>
#include<ege.h>
using namespace std;
using namespace ege;
int main(){
initgraph(640,480);
ege_point a[]={
(ege_point){100,100},
(ege_point){100,200},
(ege_point){200,100},
(ege_point){200,200},
};
ege_drawpoly(4,a);
getch();
closegraph();
return 0;
}
4.ege_drawcurve
画一条经过所有点的拟合曲线,格式与ege_drawpoly一样。
他的意思就是,画一条经过所有点的曲线,并使其看起来“自然一些”。
我也不知道我的解释是否生动形象,所以直接上代码吧
#include<bits/stdc++.h>
#include<ege.h>
using namespace std;
using namespace ege;
int main(){
initgraph(640,480);
ege_point a[]={
(ege_point){100,100},
(ege_point){100,200},
(ege_point){200,100},
(ege_point){200,200},
};
ege_drawcurve(4,a);
getch();
closegraph();
return 0;
}
可以看到,四个点被一条曲线“相当自然地”连在了一起。
5.ege_rectangle
不用我说了吧,画矩形。
6.ege_ellipse
void EGEAPI ege_ellipse(float x, float y, float w, float h, PIMAGE pimg = NULL);
可以理解为画ege_rectangle(x,y,w,h)的内切椭圆。
注意,w是矩形宽,h是矩形高。
#include<bits/stdc++.h>
#include<ege.h>
using namespace std;
using namespace ege;
int main(){
initgraph(640,480);
ege_rectangle(100,100,200,300);
ege_ellipse(100,100,200,300);
getch();
closegraph();
return 0;
}
7.ege_pie
画一个椭圆扇形。
void EGEAPI ege_pie(float x, float y, float w, float h, float stangle, float sweepAngle, PIMAGE pimg = NULL);
x,y,w,h与上面ege_ellipse一样。
关键是stangle和sweepAngle。
这里的stangle和我们之前讲的不一样。
例如:ege_pie(100,100,200,300,45,150);
也就是说和之前反了过来——之前是向上为正,现在则相反。
它的官方解释是:
startAngle
扇形开始的角度(单位为角度,x正方向为0度,y正方向为90度)。
这里的y正方向指的是窗口的y正方向,也就是向下。不是平面直角坐标系的y正方向。
8.ege_arc
和ege_pie的格式一样,画椭圆圆弧。
9.ege_fillpoly,ege_fillrect,ege_fillellipse,ege_fillpie
和不fill前的函数格式,功能一样,只是填充颜色的。
用setfillcolor来设置填充颜色。
10.ege_setpattern_none
直接给出官方解释了。
设置高级函数颜色填充模式为默认颜色填充模式,即以setfillcolor设置的填充颜色填充。
也就是说,用ege_fillrect等时,就简单的把颜色填进去就算了,没什么特别的。
11.ege_setpattern_lineargradient
设置高级函数颜色填充模式为线性渐变颜色填充模式。
区域为从以直线为宽的条状区域,颜色由一边向另一边线性渐变。
填充区域在区域内有效。
什么意思呢,我们还是来看例子。
ege_setpattern_lineargradient(100,100,YELLOW,300,400,GREEN);
他的意思是:
1.(100,100)的颜色为YELLOW
2.(300,400)的颜色为GREEN
3.将(100,100)到(300,400)这一片矩形区域填充为从YELLOW到GREEN的渐变色。
我们在加一句
ege_fillrect(100,100,200,300);
注意,填充颜色只会在(100,100)到(300,400)生效,也就是说,如果我们把代码改成
ege_setpattern_lineargradient(100,100,YELLOW,300,300,GREEN);
出来的效果就是:
12.ege_setpattern_pathgradient
开始越来越复杂了
还是一样的,我们看一看官方定义
功能: 设置高级函数颜色填充模式为路径渐变颜色填充模式。 有效区域为由点包围成的多边形区域,区域内容颜色渐变填充。 填充区域在有效区域内才能正确填充,在有效区域外填充区域不能保证填充正确。 声明:
void ege_setpattern_lineargradient( ege_point center, color_t centercolor, int count, ege_point* points, int colcount, color_t* pointscolor, PIMAGE pimg = NULL );参数: center,centercolor 中心点的坐标及颜色 count,points 围成区域的多边形的点的个数和坐标 colcount,pointscolor 多边形每个点对应的颜色。 pimg 设置的目标图像,默认为NULL,即设置窗口。
他和fillpoly_gradient差不多,就直接放代码了。
#include<bits/stdc++.h>
#include<ege.h>
using namespace std;
using namespace ege;
int main(){
initgraph(640,480);
ege_point a[]={
(ege_point){100,100},
(ege_point){100,200},
(ege_point){200,100},
(ege_point){200,200},
};
color_t b[]={(color_t)RED,(color_t)BLUE,(color_t)YELLOW,(color_t)GREEN};
ege_setpattern_pathgradient((ege_point){150,150},YELLOW,4,a,4,b);
ege_fillrect(100,100,100,100);
getch();
closegraph();
return 0;
}
反正这玩意很难搞就对了,也没有什么人去用它。
13.ege_setpattern_ellipsegradient
void EGEAPI ege_setpattern_ellipsegradient(ege_point center, color_t centercolor,
float x, float y, float w, float h, color_t color, PIMAGE pimg = NULL);
设置高级函数颜色填充模式为椭圆渐变颜色填充模式。 有效区域为椭圆区域,区域内容颜色渐变填充。 填充区域在有效区域内才能正确填充。 void ellipsegradient( ege_point center, //中心点坐标 color_t centercolor, //中心点颜色 float x, float y, float w, float h, color_t color, //边界颜色 PIMAGE pimg = NULL );
这里也是直接放代码了。
#include<bits/stdc++.h>
#include<ege.h>
using namespace std;
using namespace ege;
int main(){
initgraph(640,480);
ege_setpattern_ellipsegradient((ege_point){125,150},RED,50,100,200,100,YELLOW);
ege_fillellipse(50,100,200,100);
getch();
closegraph();
return 0;
}
三、总结
以上就是我们今天要讲的内容了。ege高级绘图函数不止这一些,后面就越来越难了。
我们下次再继续!