C++经典绘图工具EasyX
EasyX简介
在学习C语言时,很多同学抱怨说C只能写最简单的Demo程序,通过printf在屏幕上打印字符来验证代码。这样的编程很枯燥,一点没觉得自己在设计软件。
EasyX是针对C++的第三方图形库,通过它我们能够在屏幕上绘制出自己喜欢的各种颜色的图形。有了它,自己编写好玩的小游戏不是梦哦。
使用EasyX有下面几点要求:
- 只能在Windows下使用
- 建议使用Visual Studio作为IDE
- 必须写C++代码(文件后缀名为cpp)
EasyX安装
下载路径
安装
解压下载目录 EasyX_20151015(beta).zip 如下:

双击 setup.hta 文件

找到需要的VS版本点击安装即可。
PS:在解压缩的文件中,有个EasyX_help.chm文件,它是EasyX的文档,所有API的介绍都在里面。
作为一个软件开发人员,阅读文档是最基本的技能,希望大家从现在开始培养自己这方面的能力。如果你通读了这个文档之后,相信你完全能够自己完成在屏幕上画出自己想要的图案。
EasyX基本API
在EasyX的文档中,有一节是“超简单的使用预览”,里面有这样一段代码。
#include <iostream>
#include <graphics.h>
#include <conio.h>
void main()
{
initgraph(640, 480); // 创建图形界面
circle(200, 200, 100); // 画圆,圆心(200, 200),半径 100
getch(); // 按任意键继续
closegraph(); // 关闭图形界面
}
这段代码的执行结果如下:

这个Demo程序实现了在屏幕上画一个圆形的功能。
1. 画布的创建和销毁
main函数中,第一行和最后一行代码是创建和删除图形界面,这个图形界面常常被叫做“画布”。
- initgraph()
创建画布时,需要输入目标窗口的长宽值。
- closegraph()
和C语言中一样,C++也强调代码的对称性,申请资源和释放资源的代码总是成对出现的。
2. 坐标系
在 EasyX 中,坐标分为:逻辑坐标和物理坐标。
我们这里只介绍逻辑坐标。
逻辑坐标是在程序中用于绘图的坐标体系。
坐标默认的原点在屏幕的左上角,X 轴向右为正,Y 轴向下为正,度量单位是象素。
坐标的原点,方向和单位都可以通过特定函数修改。我们一般只采用默认设置。
3. 圆形绘制
circle这个函数用于画圆。
void circle(
int x,
int y,
int radius
);
参数:
- x
圆的圆心 x 坐标。 - y
圆的圆心 y 坐标。 - radius
圆的半径。
Demo程序中就是用这个函数绘制了一个圆心为(200, 200),半径为100的圆形。
4. 直线绘制
这个函数用于画线。还可以用 linerel 和 lineto 画线。
void line(
int x1,
int y1,
int x2,
int y2
);
参数
x1
线的起始点的 x 坐标。y1
线的起始点的 y 坐标。x2
线的终止点的 x 坐标。y2
线的终止点的 y 坐标。
5. 矩形绘制
这个函数用于画空心矩形。
void rectangle(
int left,
int top,
int right,
int bottom
);
参数
left
矩形左部 x 坐标。top
矩形上部 y 坐标。right
矩形右部 x 坐标。bottom
矩形下部 y 坐标。
6. 椭圆绘制
这个函数用于画椭圆。
void ellipse(
int left,
int top,
int right,
int bottom
);
参数
left
椭圆外切矩形的左上角 x 坐标。top
椭圆外切矩形的左上角 y 坐标。righ椭圆外切矩形的右下角 x 坐标。
bottom
椭圆外切矩形的右下角 y 坐标。
上面是几个基本图形的绘制方法,它们有个特点是画出的都是空心的图形。与之对应的是一组绘制带有填充颜色图形的接口。
fillcircle(), fillellipse(), fillrectangle()
它们的参数和画空心的接口完全一样,只不过使用前需要调用下面这个接口设置填充颜色。
setfillcolor()
下面我们来看看这些函数究竟能做什么。
EasyX实战

上面这幅图就是用EasyX实现的。哈哈,貌似有点丑, 不过假如你能独立写出这个功能,说明你已经基本掌握了EasyX的用法。
提供一个代码框架:
#include <iostream>
#include <graphics.h>
void main()
{
initgraph(800, 600);
// Add your code
closegraph();
}
这里请先自己思考一下,不要急往下看。
(... 15分钟过去了 ...)
分析
这幅图主要是由圆形、椭圆形、矩形和直线组成的,这几个形状的API我们都已经介绍过了。我们只要按顺序把它们画在屏幕上就好了。
代码实现
在C++工程的main.cpp文件中输入下面代码。
#include <iostream>
#include <graphics.h>
#include <conio.h>
void main()
{
initgraph(800, 600);
// 记录当前填充颜色
COLORREF save_color = getfillcolor();
// 绘制矩形框
rectangle(50, 50, 550, 550);
// 画空心圆
circle(200, 150, 50);
circle(400, 150, 50);
// 画空心椭圆
ellipse(100, 100, 500, 300);
// 填充椭圆内的绿色部分
setfillcolor(GREEN);
floodfill(300, 200, getlinecolor());
// 填充一个白色的椭圆
setfillcolor(WHITE);
fillellipse(200, 210, 400, 290);
// 填充一个绿色的矩形
setfillcolor(GREEN);
fillrectangle(150, 300, 450, 500);
// 画一条直线
line(300, 500, 300, 550);
// 按任意键继续
getch();
// 恢复填充颜色
setfillcolor(save_color);
closegraph();
}
好了,按一下Ctrl + F5,是不是看到效果了?
对大多数人来说,椭圆内部的不规则的绿色面积应该是最难实现的,floodfill()这个函数就是帮助我们将一个点所在的封闭范围内全部用填充颜色涂掉。除了设置点坐标之外还要输入这个封闭区域边框的颜色。
这里需要强调的是,在初始化画布之后,我们获取了当前的填充颜色,在绘制完成后又把当前填充颜色恢复到了我们程序执行之前的状态。
这个习惯非常重要,就是要让我们的程序在运行过之后,系统环境没有任何变化。否则在未来负责的工程中,很可能因为某个模块乱改系统设置产生很多不必要的bug。
好了,现在是不是比较有成就感呢?
由于EasyX的使用会贯穿于我们这个系列的项目中,因此这里就不过多介绍了,后面用到了新内容我们再讲。
学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入学习交流群
639368839,我们一起学C/C++!
C++经典绘图工具EasyX的更多相关文章
- UML系列01之 UML和绘图工具Visio介绍
概要 UML,全称是Unified Modeling Language,中文是"统一建模语言".通俗点说,UML是一种创建模型的语言.UML是在开发阶段,说明,可视化,构建和书写一 ...
- 用MSoffice里的绘图工具
试过一些绘图表的工具,在xbeta推荐的替代visio一文中介绍的一些软件.之前用得最多的就是Dia,在linux下也有.现在才发现在微软的office下的绘图工具已经足够我使用了,不需要专业的图形符 ...
- 一起来画画!8款最佳HTML5绘图工具
HTML5无疑是当前最受宠的一项技术,今天推荐8款HTML5绘图工具,同样惊艳你的眼球!这些绘图工具大多数是用HTML5画布(Canvas)实现的,部分辅以Javascript.对每一个web设计者来 ...
- Opencv实现的简易绘图工具
第一次写博,还是个菜鸟.最近开始学习Opencv,试着写了个简易的绘图工具(目前只写了画线和橡皮擦部分,画其它图形还有待往里添加),也算是记录自己的学习之路. #include "stdaf ...
- HTML5 canvas 在线画笔绘图工具(一)
HTML5 canvas 在线画笔绘图工具(一) 功能介绍 这是我用Javascript写的第一个程序,在写的过程中走了很多弯路,所以写完之后想分享出来,给与我一样的初学者做为学习的参考,同时在编写这 ...
- 绘图工具graphviz学习使用
画图工具: http://www.tuicool.com/articles/r2iAfa http://www.tuicool.com/articles/RjQfey 绘图工具graphviz学习使用 ...
- HTML5 canvas 在线画笔绘图工具(三)
组装画板(TDrawBuilder) 在这一小节中我们要把工具条和画板组装起来,让他们可以协同进行工作. 画板通过一个命名为TDrawBuilder来进行组装.在详细讲解TDrawBuilder对象之 ...
- Android 绘图工具库AChartEngine
From: http://www.oschina.net/p/achartengine AChartEngine是为android应用而设计的绘图工具库.目前该库的最新稳定版本是0.7,支持绘制以下类 ...
- PS2: 这篇文章中的图片绘图工具使用的是Dia (sudo apt-get install dia)。据说yEd也很不错。
SBCL编译过程 - O.Nixie的专栏 - 博客频道 - CSDN.NET PS2: 这篇文章中的图片绘图工具使用的是Dia (sudo apt-get install dia).据说yEd也很不 ...
随机推荐
- 根据GPS经纬度判断当前所属的市区
这个事情分两步走 1. 拿到行政区划的地理围栏数据 2. 根据GPS定位判断一个点是否落在地理围栏的多边形区域里. 1. 获取行政区划的地理围栏数据可以利用百度API.打开以前我的一个例子在chrom ...
- 使用EzHttp框架 开发基于HTTP协议的CS轻应用
框架概述 EzHttp是临时起意构思和开发的一个框架,目的在于简化CS轻应用开发过程.开发语言是C#. 普通的基于HTTP的应用开发基本上是RESTful的,客户端调用封装需要人工写代码,就算利用三方 ...
- [C#学习]0.发表之前想说的
在这里我将学习C#编程,首先我也只是一个初学者,只是为了以后的学习,并且方便复习,所以决定在这里记录总结一些知识,简单的写一个教程.所以在这里或许难免有一些错误,欢迎大家指出,一起进步. 在这里我使用 ...
- 产品经理学Python:逻辑判断与运算符
这是关于Python的第6篇文章,主要介绍下逻辑判断与运算符. (一) 逻辑判断: 如果要实现一个复杂的功能程序,逻辑判断必不可少.逻辑判断的最基本标准:布尔类型. 布尔类型只有两个值:True和Fa ...
- Linux下Hadoop2.7.1集群环境的搭建(超详细版)
本文旨在提供最基本的,可以用于在生产环境进行Hadoop.HDFS分布式环境的搭建,对自己是个总结和整理,也能方便新人学习使用. 一.基础环境 ...
- jQuery的hover方法搭配css的hover选择器,实现选中元素突出显示
问题简述: 今天做帮一个师姐做网页遇到一个这样的要求: 鼠标不移动进表格,表格透明度不变. 鼠标移动进表格,hover到的单元格透明度不变,没hover到的单元格透明度改变. 先贴我已经实现好的效果, ...
- Configuration problem: Unable to locate Spring NamespaceHandler for XML schema namespace 解决方法
这个问题是在用到spring时,本地IDE里面跑的很正常,但是打包后在集群上运行时报错. 多方查找资料后确定了问题的根源,由于在依赖中调用了spring的许多包,会存在文件覆盖的情况. 具体是 这三个 ...
- vue.js应用开发笔记
看vue.js有几天了,之前也零零散散的瞅过,不过一直没有动手去写过demo,这几天后台事比较少,一直在讨论各种需求(其实公司对需求还是比较重视与严谨的,一个项目需求讨论就差不多一周了,这要搁之前,天 ...
- MySQL unique 注意
刚才修改表结构: alter table room add CONSTRAINT roomname_unique UNIQUE(roomname); 结果提示如下错误: ERROR : Specifi ...
- php高性能开发阅读笔记
1.http请求与响应的简单流程 上图简单的描述了一个http请求与响应的过程,首先是用户请求过程,这是该生命周期的第一部分,用户发起请求,经过路由器与ips网关和dns服务器(域名服务器),通过we ...