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也很不 ...
随机推荐
- 【转】JDBC学习笔记(1)——JDBC概述
转自:http://www.cnblogs.com/ysw-go/ JDBC JDBC API是一个Java API,可以访问任何类型表列数据,特别是存储在关系数据库中的数据.JDBC代表Java数据 ...
- Linux-配置vim开发环境
vim是一个类似于vi的著名的功能强大.高度可定制的文本编辑器,在vi的基础上改进和增加了很多特性.vim是纯粹的自由软件. 为了满足使用者的要求,将vim界面配置为自己想要的界面类型也变得流行起来. ...
- eclipse中AndroidA工程依赖B工程设置
假设library为B工程,而SlideMenuTest为A工程,且SlideMenuTest需要依赖library工程(减少jar包形式的修改麻烦). 需要简单的设置即可. 1.B工程设置为libr ...
- python安装pillow模块错误
安装的一些简单步骤就不介绍了,可以去搜索一下,主要就记录下我在安装pillow这一模块遇到的问题 1:安装好pillow后,安装过程没有出错 2:但是在python的IDLE输入from PIL im ...
- linux 内核的futex pi-support,即pi-futex使用rt_mutex委托
futex的pi-support,也就是为futex添加pi算法解决优先级逆转的能力,使用pi-support的futex又称为pi-futex.在linux内核的同步机制中,有一个pi算法的成例,就 ...
- JavaFx自定义Tab-Order
title: JavaFx自定义Tab-Order Tab-order是什么?在界面上当你按tab键触发焦点转移的功能,这就是tab order.但是Javafx有个缺陷就是不方便自己设置tab-or ...
- Kafka 源码剖析
1.概述 在对Kafka使用层面掌握后,进一步提升分析其源码是极有必要的.纵观Kafka源码工程结构,不算太复杂,代码量也不算大.分析研究其实现细节难度不算太大.今天笔者给大家分析的是其核心处理模块, ...
- python3 selenium 登录操作
使用场景: 测试过程中,有的时候需要登录才可以进行其他操作 举例说明: # coding=utf-8 """ :author: 花花测试 :time: 2017.05.0 ...
- poj3067 Japan 树状数组求逆序对
题目链接:http://poj.org/problem?id=3067 题目就是让我们求连线后交点的个数 很容易想到将左端点从小到大排序,如果左端点相同则右端点从小到大排序 那么答案即为逆序对的个数 ...
- maven学习2,安装插件
eclipse 安装插件的方式最常见的有两种: 1. 一种是在线安装,这貌似是用的最多的,就是:Help --> Install New Software,然后输入 HTTP 地址来安装,但 ...