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也很不 ...
随机推荐
- Vuex(一)——vuejs的状态管理模式
一.Vuex是什么? Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式. 它采用集中式存储 管理 应用的所有组件 的 状态,并以 相应的规则 保证 状态以一种 可预测的方式 发生变化. ...
- 一个全局变量引起的DLL崩溃
参考我发的帖子: http://bbs.csdn.net/topics/390737064?page=1#post-397000946 现象是exe程序在加载dll的时候崩溃了,莫名其妙的崩溃了.换其 ...
- Windows7下安装IIS
1.点击开始→控制面板,然后再点击程序,勿点击卸载程序,否则到不了目标系统界面. 2.然后在程序和功能下面,点击打开和关闭windows功能. 3.进入Windows功能窗口,然后看到internet ...
- CSS3 02. 边框、边框圆角、边框阴影、边框图片、渐变、线性渐变、径向渐变、背景、过渡transition、2D转换
边框圆角 border-radius 每个角可以设置两个值,x值.y值 border-top-left-radius:水平半径 垂直半径 border-radius:水平半径/垂直半径 border- ...
- React学习(一)父子组件通讯
React父子组件之间通讯,利用props和state完成,首先React是单向数据流,父组件可以向子组件传递props: 实现父子组件双向数据流整体的思路是: 1,父组件可以向子组件传递props, ...
- cmd 菜单学习
@ECHO OFF&PUSHD %~DP0 &TITLE 标题是随意的 mode con cols=36 lines=20 color 2C :menu cls echo. echo ...
- window系统下sbt的安装
最近进了一个新公司,用playframework,不用maven,用sbt,然后就来写一下自己的心酸sbt安装进程吧. 第一步: 安装java8,配置好环境变量,这些不用多说吧,之所以是要8版本,是因 ...
- ThinkPHP框架的增删改
使用TP框架主要是比较简单一些,之前我们写增删改,代码量相对来说还是比较多的,这里利用tp框架写起来是非常简单的,大大的减少了代码量 这里我是以数据库的nation表为例的,nation表 ...
- IOS(二)基本控件UIButton、简易动画、transform属性、UIImageView
UIButton //1.设置UIButton 的左右移动 .center属性 获得 CGPoint 来修改x y //1.设置UIButton 的放大缩小 bounds属性 获得CGRect 然后通 ...
- OC分类(Category)
Category 分类 ,又称为类别.类目 概念 Category有多种翻译:分类.类别.类目(一般叫分类的多) Category式OC特有的语法,其他语言没有的语法(类似于C#语言中的"扩 ...