C++经典绘图工具EasyX

EasyX简介

EasyX

在学习C语言时,很多同学抱怨说C只能写最简单的Demo程序,通过printf在屏幕上打印字符来验证代码。这样的编程很枯燥,一点没觉得自己在设计软件。

EasyX是针对C++的第三方图形库,通过它我们能够在屏幕上绘制出自己喜欢的各种颜色的图形。有了它,自己编写好玩的小游戏不是梦哦。

使用EasyX有下面几点要求:

  • 只能在Windows下使用
  • 建议使用Visual Studio作为IDE
  • 必须写C++代码(文件后缀名为cpp)

EasyX安装

下载路径

download

安装

解压下载目录 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++!

时间: 2024-08-02 10:38:44

C++经典绘图工具EasyX的相关文章

HTML5 canvas 在线画笔绘图工具(三)

组装画板(TDrawBuilder) 在这一小节中我们要把工具条和画板组装起来,让他们可以协同进行工作. 画板通过一个命名为TDrawBuilder来进行组装.在详细讲解TDrawBuilder对象之前我们来看一下程序的HTML代码. 画布由三个Canvas组成 toolbar用于绘制工具条,drawCanvas 用于画图的画布,openCanvas 用于在打开保存的图片时显示小图片. 通过建立一个新的TDrawBuilder对象 new TDrawBuilder(toolbar,drawcan

Android 绘图工具库AChartEngine

From: http://www.oschina.net/p/achartengine AChartEngine是为android应用而设计的绘图工具库.目前该库的最新稳定版本是0.7,支持绘制以下类型的图表: line chart area chart scatter chart time chart bar chart pie chart bubble chart doughnut chart range (high-low) bar chart dial chart / gauge com

那些年,我追过的绘图工具

https://zhuanlan.zhihu.com/p/19900327 ***************************** 文档能力是一个工程师必不可少的基础能力,而高质量的文档往往伴随着高质量的图表."A picture is worth a thousand words",复杂的概念,逻辑,想法往往能够用图表清晰而生动地表达.一张好的图表离不开制作人的大脑对思维的描述,但同样离不开制作人所使用的工具.好的工具,让同样的事情事半功倍.我是一个工具爱好者,即便手头上有一个称

10款最佳HTML5绘图工具

HTML5无疑是当前最受宠的一项技术,每个web设计者都在热烈的讨论这种神奇的标记语言的兴起.HTML5是一种学起来毫不费力的标记语言,但它却能提供迷人的.富有艺术性的特征,帮助web设计人员完成他们的构思想象.HTML5对于一个设计人员来说能毫不费力的理解,轻松的掌握. 草绘和制图是设计工作者工作中一个重要的特征.HTML5将会这方面显露出不可限量的前途. 今天,我给web设计人员收集了几款最好的HTML5绘图或涂鸦工具.这些绘图工具大多数是用HTML5画布(Canvas)实现的,部分辅以Ja

Android基础入门教程——8.3.1 三个绘图工具类详解

Android基础入门教程--8.3.1 三个绘图工具类详解 标签(空格分隔): Android基础入门教程 本节引言: 上两小节我们学习了Drawable以及Bitmap,都是加载好图片的,而本节我们要学习的绘图相关的 一些API,他们分别是Canvas(画布),Paint(画笔),Path(路径)!本节非常重要,同时也是我们 自定义View的基础哦~好的,话不多说开始本节内容~ 官方API文档:Canvas:Paint:Path: 1.相关方法详解 1)Paint(画笔): 就是画笔,用于设

老牌绘图工具pic的基本使用

作者小白对WYTIWYG(What You Think Is What You Get)"所思即所得"的绘图方式情有独钟.之前就听说过metapost及asymptote两种绘图工具,很多网友都说,两种绘图工具,会其一,就可满足一生所需. 作者也是无意当中发现了Raymond大叔(没错,就是那个<大教堂和集市>的作者)写的一篇文章<Making Pictures With GNU PIC>,介绍PIC的基本使用.其中,文章中说, "The pic la

Python绘图工具matplotlib的安装

今天在机子上安装matplotlib遇到一些问题,特将此记录下来,供大家分享以少走弯路. 1:下载matplotlib 去官网上下载你所需要的版本http://matplotlib.org/download.html,  注意这里的32位和64位指的是python版本.由于是exe文件,直接安装即可. 2:import matplotlib 当我在python shell 中使用命令import matplotlib时出现了以下错误 此时我们需要安装dateutil,这里需要使用easy_ins

百度搜索量第一的化学绘图工具,竟是它?

互联网连接你我他,将世界变成地球村,搜索引擎就是互联网的入口,所谓万事问“度娘”一点也不假.搜索引擎掌握用户的大数据,它会将最优质的最符合用户需求的结果排在第一位推荐给用户.如果你现在只知道自己要找一款化学绘图工具但是不知道哪一款最好,那就在百度搜索“化学绘图工具”嘛,排在第一位的你可以毫不犹豫的选择,那就是ChemDraw! 为了获取最安全最绿色最正规的软件包,建议你搜索ChemDraw中文官网进行下载:http://www.chemdraw.com.cn/. 言归正传,ChemDraw之所以

jquery 绘图工具 ------flot

flot网址:http://code.google.com/p/flot/ 下载 JS 文件,使用方法和 jquery 一样. 注意:flot是自动绘制在画布标签(canvas)内的,IE不支持,需要添加 excanvas.min.js ,此文件可以在上面给出的flot网址中下载 示例网址:http://people.iola.dk/olau/flot/examples/ 参数说明:http://wenku.baidu.com/view/d504613331126edb6f1a1008.html