准备工作
IDE
就不再使用Dev-Cpp进行代码开发了,而是使用更加强大的Visual Studio。
然后下载EasyX头文件安装器。
先安装Visual Studio,选择C#/C++开发,等待安装完毕。
然后打开EasyX.exe安装头文件。
新项目
打开Visual Stuio,按照如下过程新建项目。
然后在下一页选择好保存位置和项目名称,新建即可。
接着打开这个项目,右键左侧(默认在右侧,我挪到了左侧)源文件
,新建一个源文件。
EasyX的使用
- 下面有些内容因为没有阻断,所以要在
return 0
前面加上getchar()
来阻断程序直接终止。所以基本框架为:
#include <stdio.h>
#include <easyx.h>
int main() {
getchar(); //防止程序退出
return 0;
}
头文件
导入头文件。
#include <stdio.h>
#include <easyx.h> //EasyX的头文件
窗口
新建窗口
int x=640,y=480;
initgraph(x,y,flag);
initgraph(x,y,flag);
新建一个窗口,x和y分别表示窗口x轴方向和y轴方向的长度。flag默认为0。
- init的意思是初始化,graph的意思是图,图表,所以可以简单理解为 初始化图形界面
- 这个flag是什么意思呢?这是一个可选参数,默认等于0,即不显示之前编程使用的黑框框(控制台),设置成1就可以显示控制台了。除了0和1还有其他的选项,如图。
每一个#define
都给了一个数字,这个数字和前面的EX_
开头的等效。这几个选项根据注释的解释,意思如下: - EX_SHOWCONSOLE:显示控制台
- EX_NOCLOSE:禁用关闭按钮
- EX_NOMINIMIZE:禁用最小化按钮
- EX_DBLCLKS:支持鼠标双击事件
如果想同时设置多个要求,可以用|
分隔。如:initgraph(x,y,EX_SHOWCONSOLE | EX_NOMINIMIZE)
窗口颜色
首先使用setbkcolor()
函数设置颜色,再用cleardevice()
刷新界面应用颜色。
setbkcolor(WHITE); //设置颜色
cleardevice(); //用设置的颜色刷新窗口
这两个函数还是非常好记忆的。
setbkcolor()=>set background color=>设置背景颜色
cleardevice()=>clear device=>清空设备=>刷新窗口内容
另外的颜色呢,可以在代码中右键WHITE
,选择转到定义,就可以看见更多预设好的颜色。
更多的自定义需求,可以使用RGB混色。setbkcolor(RGB(r,g,b))
表示使用红(r)、绿(g)、蓝(b)三色混色,分别取值0-255。
窗口内的坐标系
数学中,不考虑负半轴的情况,坐标原点在左下角。但是考虑一下计算机的显示,就像书写一样是从左往右,从上往下,所以坐标原点在左上角。
- 注:宽高是不包括标题栏的。
获得窗口宽高
- 获得窗口的宽度:
getwidth()
- 获得窗口的高度:
getheight()
这个理解起来还是很简单的。
基本图像绘制
首先,这里为了方便,我将基本框架略微扩展。
#include <stdio.h>
#include <easyx.h>
void drawShape() { //绘制图形
}
int main() {
//创建一个窗口
initgraph(640, 480, EX_SHOWCONSOLE); // 宽度,高度,显示控制台
setbkcolor(WHITE); //设置颜色
cleardevice(); //用设置的颜色刷新窗口
drawShape(); //调用自己定义的绘图函数
getchar(); //防止程序退出
return 0;
}
后面的所有绘图相关的代码都写在drawShape()函数中。
绘制点
绘制一个点的函数是putpixel(x,y,color)
。
void drawShape() { //绘制图形
putpixel(50, 50, BLACK);
return;
}
这执行过后,欸,咋没有呢?其实有的,是因为这只把(50,50)这一个像素点设置成黑色了,看不清楚。如果用诸如Snipaste这种带放大镜的截图软件看,就可以看到了。
绘制线段
数学中都知道,两点确定一条线段,那么我们在绘制一条线段时,也需要指定起始坐标和终止坐标。
绘制线段的函数:line(x1,y1,x2,y2)
。x1,y1分别是起始点的坐标,x2,y2分别是终止点的坐标。
void drawShape() { //绘制图形
line(0, 0, getwidth(), getheight());
return;
}
但是这样写的代码,加入到上面的基本框架,就会发现,欸,没有线啊。其实是因为线条的默认颜色是白色,需要用setlinecolor()
函数设置颜色。
比如下面的代码,就可以画一条从左上角到右下角的黑色线段。
void drawShape() { //绘制图形
setlinecolor(BLACK);
line(0, 0, getwidth(), getheight());
return;
}
除了颜色,还可以设置线段的样式。用setlinestyle()
函数设置样式。
一共有4个参数,这里只讲前两个。setlinestyle(style,thickness)
,分别对应样式,宽度。
- style:用
PS_
开头的写法或者写后面的数字都可以设置。如设置为PS_SOLID
和1
是一样的。 -
thickness:就是线条宽度,数值>0就行。
比如用下面的代码画出来的就是- · - · - ·
的宽度为5px的线条。void drawShape() { //绘制图形 setlinecolor(BLACK); setlinestyle(PS_DASHDOT,5); line(0, 0, getwidth(), getheight()); return; }
绘制矩形
简单矩形
绘制矩形使用rectangle()
函数。
在Visual Studio打出rectangle()后,就给出了提示的用法。
这样看其实并不好记。想象一下这里有一条横平竖直的矩形的对角线,限制了方向,这个对角线是不是就可以唯一确定一个矩形?
所以这个定义的left,top什么的,就可以类比线段,记忆为rectangle(x1,y1,x2,y2)
。第一组坐标是左上角,第二组坐标是右下角。
void drawShape() { //绘制图形
setlinecolor(BLACK);
setlinestyle(PS_SOLID, 5);
rectangle(0, 0, getwidth() / 2, getheight() / 2);
return;
}
这个drawShape()函数就会以黑色实线,宽度为5px画一个从左上角到屏幕中间的无填充矩形。
- 注:
setlinecolor()
和setlinestyle()
是设置线条的颜色和样式,绘制矩形也是通过线条得到的,所以同样也可以通过这两个函数设置矩形边框的样式。
填充矩形
可以注意到,我前面专门加粗了无填充。那么怎么有填充呢?那我们稍微修改一下代码。
void drawShape() { //绘制图形
setlinecolor(BLACK);
setlinestyle(PS_SOLID, 5);
rectangle(0, 0, getwidth() / 2, getheight() / 2); //无填充矩形
setfillcolor(RED); //设置填充颜色
fillrectangle(getwidth() / 2, getheight() / 2, getwidth(), getheight()); //有填充矩形
return;
}
又新增了一个矩形绘制。setfillcolor()
设置填充的颜色,同样可以用RGB()进行混色。fillrectangle(x1,y1,x2,y2)
绘制一个矩形并用前面设置到的颜色填充。如果不设置,默认用白色填充。
可以看到,这种是有填充有边框,如果希望没有边框,那就使用solidrectangle()
函数。
圆角矩形
要绘制一个圆角矩形,使用(x1,y1,x2,y2,ellipsewidth,ellipseheight)
函数。可以看到需要提供6个参数。x1,y1,x2,y2和前面的矩形一样,后两个参数理解前需要先了解一下圆角矩形怎么画出来的。
如图,先画出一个矩形(黑笔),然后在四个角落画四个椭圆(红笔),ellipsewidth和ellipseheight的含义我也标出来了,表示这个椭圆的高度和宽度。最后,去掉矩形的四个角的部分(紫色笔圈起来),就得到了一个圆角矩形。我这里画的宽高一致,所以边缘是一个圆。
同样,这是无填充有边框圆角矩形,如果要有填充有边框则使用fillroundrect()
函数,有填充无边框则使用solidroundrect()
,参数等和上面的直角矩形一致。
绘制圆形
绘制圆形使用circle(x,y,radius)
。这三个参数,前两个指定圆心位置,radius是半径,非常的简单。
同理,线条样式等设置与前文相同。
示例:
void drawShape() { //绘制图形
setlinecolor(BLACK); //设置颜色
setlinestyle(PS_SOLID, 5); //设置样式
circle(100, 100, 50); //绘制无填充有边框圆形
return;
}
另外几种圆的样式可以类比上面。
- 有填充有边框:
fillcircle()
- 有填充无边框:
solidcircle()
绘制椭圆
椭圆是通过矩形内接得到的椭圆,所以参数和矩形类似。
- 无填充有边框:
ellipse(x1,y1,x2,y2)
- 有填充有边框:
fillellipse()
-
有填充无边框:
solidellipse()
示例:void drawShape() { //绘制图形 setlinecolor(BLACK); setlinestyle(PS_SOLID, 5); setfillcolor(RED); fillellipse(50, 50, 200, 400); //绘制有填充有边框椭圆 return; }
绘制折线
使用函数polyline()
。
示例:
void drawShape() { //绘制图形
setlinecolor(BLACK);
setlinestyle(PS_SOLID, 5);
POINT points[] = { {0,0},{50,50},{200,0},{500,400} }; //设置顶点
polyline(points, 4); //绘制
return;
}
使用POINT points[]={{x1,y1},{x2,y2},{x3,y3} ...... }
设置顶点,然后使用polyline()
函数绘制。
polyline的定义是:void polyline(const POINT* points, int num)
,第一个参数就是传入设置的顶点坐标,第二个参数是填写顶点数量。
其他图形
图形的样式远不止此嗷,更多的可以查看官方文档查看。
Comments 6 条评论
博主 杉秋
写的不错,大佬好腻害!!!
博主 KaedeharaLu
@杉秋 别,你别这么说 (ó﹏ò。) 你才是大佬,我只是刚刚学EasyX
博主 杉秋
@KaedeharaLu 我才是好吧 ,一个搞设计的能会什么(ó﹏ò。)
博主 KaedeharaLu
@杉秋 差点信咯,你的halo都是自己改的 ヾ(≧∇≦*)ゝ
博主 KaedeharaLu
@杉秋 收到邮件了吗,嘿嘿
博主 boring
哇